【发布时间】:2013-12-27 17:54:52
【问题描述】:
我正在使用 iTextSharp 并尝试从 PDF 中提取具有透明度的图像。当我提取图像时,透明度变为纯黑色并丢失。我发现了多个图像提取示例,但它们似乎都有相同的问题。我正在使用的代码如下
另一个示例来自 itextpdf.com/examples/iia.php?id=284。此示例包括顶部“结果”部分中的图像。如果您单击Img7.png,您将在图像中看到黑色边框,但是在页面底部有一个指向原始图像info.png 的链接,它以应有的方式显示透明度。这是我遇到的确切问题。任何帮助或想法将不胜感激
public void ExtractImage(string pdfFile)
{
const int pageNumber = 1; //Page number to extract the image from
PdfReader pdf = new PdfReader(pdfFile);
PdfDictionary pg = pdf.GetPageN(pageNumber);
PdfDictionary res = (PdfDictionary)PdfReader.GetPdfObject(pg.Get(PdfName.RESOURCES));
PdfDictionary xobj = (PdfDictionary)PdfReader.GetPdfObject(res.Get(PdfName.XOBJECT));
foreach (PdfName name in xobj.Keys)
{
PdfObject obj = xobj.Get(name);
if (obj.IsIndirect())
{
PdfDictionary tg = (PdfDictionary)PdfReader.GetPdfObject(obj);
string width = tg.Get(PdfName.WIDTH).ToString();
string height = tg.Get(PdfName.HEIGHT).ToString();
ImageRenderInfo imgRI =
ImageRenderInfo.CreateForXObject(new Matrix(float.Parse(width), float.Parse(height)),
(PRIndirectReference)obj, tg);
var fileType= imgRI.GetImage().GetFileType();
RenderImage(imgRI, imgPath + +imgRI.GetRef().Number + "_" + imgRI.GetRef().Generation + "test." + fileType);
}
}
pdf.Close();
}
private void RenderImage(ImageRenderInfo renderInfo, string saveImageLocation)
{
PdfImageObject image = renderInfo.GetImage();
using (var dotnetImg = image.GetDrawingImage())
{
if (dotnetImg != null)
{
dotnetImg.Save(saveImageLocation);
}
}
}
【问题讨论】:
-
一个快速的解决方案可能是购买或找到不需要您在枕头下使用 PDF 规范睡觉的东西,否则您应该遵循 Bruno 的回答。
标签: pdf itextsharp itext