我遇到了一种情况,我同时在 Web 浏览器和 Acrobat PDF 查看器中打开 PDF。在浏览器中,PDF 可以正确显示,但在 PDF 查看器中,我得到了不同的输出文件。我正在尝试确定这种差异是否与 PDF 文件本身的问题有关,或者 PDF 查看器和浏览器渲染之间是否存在固有差异。
有没有人遇到过类似的问题,您能否提供有关如何排查和解决此问题的见解或建议?此外,Web 浏览器和专用 PDF 查看器之间的 PDF 呈现方式是否存在已知差异,可以解释这种行为?
我正在使用 pdftron 和 java 1.8 修改 pdf 在pdf中添加元素和文本的代码:
Element tabElement = builder.createRect(x, y - 36, tabWidth, tabHeight);
tabElement.setPathFill(true);
GState gstate = tabElement.getGState();
gstate.setFillColorSpace(ColorSpace.createDeviceRGB());
gstate.setFillColor(new ColorPt(0.9, 0.9, 0.9));
elementWriterLine1.writeElement(tabElement);
Element tabTextElementLine1 = builder.createTextBegin(Font.createTrueTypeFont(outputPdfDoc, ARIAL, true), 8);
Element textLine1 = builder.createTextRun("TEXT LINE 1");
if(isLandscape) {
tabPosition = 4 - tabPosition;
tabTextElementLine1.getGState().setTransform(1, 0, 0, 1, pageWidth - gap - (tabPosition * tabWidth) - (tabWidth/2 + textLine1.getTextLength()/2) , tabHeight-13 );
} else {
tabTextElementLine1.getGState().setTransform(0, -1, 1, 0, pageWidth - 13 , pageHeight - gap - (tabPosition * tabHeight) - (tabHeight/2 - textLine1.getTextLength()/2) );
}
tabTextElementLine1.getGState().setFillColorSpace(ColorSpace.createDeviceRGB());
tabTextElementLine1.getGState().setFillColor(new ColorPt(0, 0, 0));
tabTextElementLine1.setPathFill(true);
elementWriterLine1.writeElement(tabTextElementLine1);
我和同事分享了pdf文件,他们也面临着同样的问题。
您的文本不是在文本对象内绘制的。文本绘制指令只能在文本对象中使用。
你有
0.9 0.9 0.9 rg
36 0 144 36 re
f*
1 0 0 1 67.104 23 cm
0 0 0 rg
/F0 8 Tf
q
(TEST LINE1 OF TAB1) Tj
1 0 0 1 67.104 23 cm
Q
(TEST LINE1 OF TAB1) Tj
但你可能应该有
0.9 0.9 0.9 rg
36 0 144 36 re
f*
1 0 0 1 67.104 23 cm
0 0 0 rg
/F0 8 Tf
q
BT
(TEST LINE1 OF TAB1) Tj
ET
1 0 0 1 67.104 23 cm
Q
BT
(TEST LINE1 OF TAB1) Tj
ET
但我不知道如何让 pdftron 添加 BeginText 和 EndText 运算符。