如何使用 GhostScript.NET 阅读整个 PDF
How to read entire PDF with GhostScript.NET
我有一个向用户显示图像的网页。该显示旨在确认用户已上传正确的文档。出于安全要求,我决定将图像嵌入 html(这允许所有图像具有相同的 URL)。我的应用程序允许使用几种不同类型的文件,但我的问题是 pdf 文件。
我正在使用 Ghostscript.NET 和 Ghostscript 来阅读我的 pdf 并将它们转换成图像,以便我可以嵌入它们。我的 Ghostscript 实现正在读取文件,但我只能显示第一页。我的问题:如何在一页或多页上显示整个 pdf?
我试过:
do
{
img = _rasterizer.GetPage(desired_x_dpi, desired_y_dpi, pageNumber);
img.Save(ms, ImageFormat.Png);
imageBytes = ms.ToArray();
returnString += Convert.ToBase64String(imageBytes);
pageNumber++;
} while (pageNumber <= _rasterizer.PageCount);
_rasterizer.Close();
ms.Close();
return returnString;
上面的实现生成了一个非常大的字符串,但是 'broken image' 图标显示在网页上。
do
{
img = _rasterizer.GetPage(desired_x_dpi, desired_y_dpi, pageNumber);
img.Save(ms, ImageFormat.Png);
imageBytes = ms.ToArray();
Session["NextPage"] = Convert.ToBase64String(imageBytes);
if (pageNumber > 1)
{
Response.Write("<script>");
Response.Write("window.open('ImageDisplayMultiPage.aspx')");
Response.Write("<" + "/script>");
}
else
{
Image3.ImageUrl = "data:image/png;base64," + Session["NextPage"];
}
pageNumber++;
} while (pageNumber <= _rasterizer.PageCount);
_rasterizer.Close();
ms.Close();
此实现成功打开 windows 等于文档中的页数,但在除一个网页之外的所有网页上显示 pdf 的第一页。其余网页显示 'broken image' 图标。仅供参考,此方法打开的网页使用:
Image3.ImageUrl = "data:image/png;base64," + Session["NextPage"];
写入其设置正确的页面。
同样,目标是将整个 pdf 转换为 base64 字符串。可以多页显示,也可以单页显示。你知道怎么做吗?
上传的文件大小限制为 5mb,我猜最大的 pdf 将有 5 页,但这不是问题。
我最终不得不在循环结束时关闭光栅器,并在循环开始时重新打开它。此实施有效:
List<string> pagesOfPDF = new List<string>();
MemoryStream ms = new MemoryStream();
_rasterizer.Open(inputPdfPath, localDllInfo, false);
int numberOfPages = _rasterizer.PageCount;
_rasterizer.Close();
for (int pageNumber = 1; pageNumber <= numberOfPages; pageNumber++)
{
_rasterizer.Open(inputPdfPath, localDllInfo, false);
ms = new MemoryStream();
img = null;
string returnString;
img = _rasterizer.GetPage(desired_x_dpi, desired_y_dpi, pageNumber);
img.Save(ms, ImageFormat.Png);
imageBytes = ms.ToArray();
returnString = Convert.ToBase64String(imageBytes);
pagesOfPDF.Add(returnString);
ms.Close();
_rasterizer.Close();
}
foreach (string image in pagesOfPDF)
{
imageDisplay.Controls.Add(new HtmlImage()
{
Src = "data:image/png;base64," + image,
Alt = ""
});
}
ms.Close();
我有一个向用户显示图像的网页。该显示旨在确认用户已上传正确的文档。出于安全要求,我决定将图像嵌入 html(这允许所有图像具有相同的 URL)。我的应用程序允许使用几种不同类型的文件,但我的问题是 pdf 文件。
我正在使用 Ghostscript.NET 和 Ghostscript 来阅读我的 pdf 并将它们转换成图像,以便我可以嵌入它们。我的 Ghostscript 实现正在读取文件,但我只能显示第一页。我的问题:如何在一页或多页上显示整个 pdf?
我试过:
do
{
img = _rasterizer.GetPage(desired_x_dpi, desired_y_dpi, pageNumber);
img.Save(ms, ImageFormat.Png);
imageBytes = ms.ToArray();
returnString += Convert.ToBase64String(imageBytes);
pageNumber++;
} while (pageNumber <= _rasterizer.PageCount);
_rasterizer.Close();
ms.Close();
return returnString;
上面的实现生成了一个非常大的字符串,但是 'broken image' 图标显示在网页上。
do
{
img = _rasterizer.GetPage(desired_x_dpi, desired_y_dpi, pageNumber);
img.Save(ms, ImageFormat.Png);
imageBytes = ms.ToArray();
Session["NextPage"] = Convert.ToBase64String(imageBytes);
if (pageNumber > 1)
{
Response.Write("<script>");
Response.Write("window.open('ImageDisplayMultiPage.aspx')");
Response.Write("<" + "/script>");
}
else
{
Image3.ImageUrl = "data:image/png;base64," + Session["NextPage"];
}
pageNumber++;
} while (pageNumber <= _rasterizer.PageCount);
_rasterizer.Close();
ms.Close();
此实现成功打开 windows 等于文档中的页数,但在除一个网页之外的所有网页上显示 pdf 的第一页。其余网页显示 'broken image' 图标。仅供参考,此方法打开的网页使用:
Image3.ImageUrl = "data:image/png;base64," + Session["NextPage"];
写入其设置正确的页面。
同样,目标是将整个 pdf 转换为 base64 字符串。可以多页显示,也可以单页显示。你知道怎么做吗?
上传的文件大小限制为 5mb,我猜最大的 pdf 将有 5 页,但这不是问题。
我最终不得不在循环结束时关闭光栅器,并在循环开始时重新打开它。此实施有效:
List<string> pagesOfPDF = new List<string>();
MemoryStream ms = new MemoryStream();
_rasterizer.Open(inputPdfPath, localDllInfo, false);
int numberOfPages = _rasterizer.PageCount;
_rasterizer.Close();
for (int pageNumber = 1; pageNumber <= numberOfPages; pageNumber++)
{
_rasterizer.Open(inputPdfPath, localDllInfo, false);
ms = new MemoryStream();
img = null;
string returnString;
img = _rasterizer.GetPage(desired_x_dpi, desired_y_dpi, pageNumber);
img.Save(ms, ImageFormat.Png);
imageBytes = ms.ToArray();
returnString = Convert.ToBase64String(imageBytes);
pagesOfPDF.Add(returnString);
ms.Close();
_rasterizer.Close();
}
foreach (string image in pagesOfPDF)
{
imageDisplay.Controls.Add(new HtmlImage()
{
Src = "data:image/png;base64," + image,
Alt = ""
});
}
ms.Close();