添加图片作为使用PDFBox的图标为PDF文档

问题描述 投票:0回答:1

我试图模仿使用PDF对话框导入图片作为图标的数量大到一个PDF文档Acrobat的JS调用doc.importIcon()的行为。

我已经创建并添加一个PDAppearanceStream到AP字典。不幸的是不通过doc.getIcon() JS调用后来在PDF JS访问的图标。

也许你的人有同样的问题。我想我在这里失去了只是一小块。

我当前的代码如下所示:

PDDocumentCatalog docCatalog = document.getDocumentCatalog();
PDDocumentNameDictionary nameDict = docCatalog.getNames();


COSDictionary dic = nameDict.getCOSObject().getCOSDictionary(COSName.AP);
COSArray names = (COSArray) dic.getDictionaryObject(COSName.NAMES);

PDImageXObject imgNeu = PDImageXObject.createFromFileByContent(new File("C:\\FancyPicture.jpg"), document);
float width = imgNeu.getWidth();
float height = imgNeu.getHeight();

PDAppearanceStream pdAppearanceStream = new PDAppearanceStream(document);
pdAppearanceStream.setResources(new PDResources());
try (PDPageContentStream pdPageContentStream = new PDPageContentStream(document, pdAppearanceStream))
{
    pdPageContentStream.drawImage(imgNeu, 0, 0, width, height);
}
pdAppearanceStream.setBBox(new PDRectangle(width, height));
pdAppearanceStream.setFormType(1);

COSArray defaultRes = new COSArray();
defaultRes.add(COSName.getPDFName("PDF"));
defaultRes.add(COSName.getPDFName("ImageC"));
pdAppearanceStream.getResources().getCOSObject().setItem(COSName.PROC_SET, defaultRes);

Matrix mat = new Matrix(1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f);
pdAppearanceStream.setMatrix(mat.createAffineTransform());

COSDictionary strDic = pdAppearanceStream.getCOSObject();
strDic.setString(COSName.NAME, "FRM");

COSString key = new COSString("img_01");
names.add(key.getCOSObject());
names.add(pdAppearanceStream.getCOSObject());
pdf pdfbox
1个回答
1
投票

事实证明,仿佛在Acrobat的JS运行时需要编码为UTF-16含的COSString elems的。字节顺序标记

图标名称的正确编码和使用COSString(byte[])一切后,按预期工作。

© www.soinside.com 2019 - 2024. All rights reserved.