【发布时间】:2021-01-27 20:55:42
【问题描述】:
更新:这适用于 adobe 阅读器,但不适用于 osx 默认的 pdf 阅读器。我们的许多用户都使用默认的 osx 阅读器,所以理想情况下我可以让它在那里工作,我知道它支持注释)
我正在使用 Apache PDFBox 2.0.22 尝试以编程方式向 pdf 添加注释。我运行的代码会生成一个带有注释的 pdf,但注释的内容文本是空的(参见屏幕截图)。我做错了什么?
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.apache.pdfbox.pdmodel.graphics.color.PDColor;
import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceRGB;
import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotation;
import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationTextMarkup;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.List;
public class Sample{
public static void main(String[] args) throws FileNotFoundException, IOException{
PDDocument doc = PDDocument.load(new File("test.pdf"));
try {
//insert new page
PDPage page = (PDPage) doc.getDocumentCatalog().getPages().get(0);
List<PDAnnotation> annotations = page.getAnnotations();
//generate instanse for annotation
PDAnnotationTextMarkup txtMark = new PDAnnotationTextMarkup(PDAnnotationTextMarkup.SUB_TYPE_HIGHLIGHT);
//set the rectangle
PDRectangle position = new PDRectangle();
position.setLowerLeftX(170);
position.setLowerLeftY(125);
position.setUpperRightX(195);
position.setUpperRightY(140);
txtMark.setRectangle(position);
//set the quadpoint
float[] quads = new float[8];
//x1,y1
quads[0] = position.getLowerLeftX();
quads[1] = position.getUpperRightY() - 2;
//x2,y2
quads[2] = position.getUpperRightX();
quads[3] = quads[1];
//x3,y3
quads[4] = quads[0];
quads[5] = position.getLowerLeftY() - 2;
//x4,y4
quads[6] = quads[2];
quads[7] = quads[5];
txtMark.setQuadPoints(quads);
txtMark.setAnnotationName("My annotation");
txtMark.setTitlePopup("title popup");
txtMark.setContents("Highlighted since it's important");
txtMark.setRichContents("Here is some rich content");
PDColor blue = new PDColor(new float[] { 0, 0, 1 }, PDDeviceRGB.INSTANCE);
txtMark.setColor(blue);
annotations.add(txtMark);
page.setAnnotations(annotations);
doc.save("test-out.pdf");
}finally
{
doc.close();
}
}
}
【问题讨论】:
-
请尝试致电
txtMark.constructAppearances()并告知是否可行。 -
感谢您的建议,但这似乎并没有改变任何事情。还有其他想法吗?
-
更新!它可以在 adobe 阅读器中工作,但不能在默认的 osx pdf 阅读器中工作。我很想在这两个方面都有这项工作,但我想这是一个开始
-
如果您使用 Adobe Reader 打开文件,在注释中稍作更改并保存,它会在 OSX 中显示吗?
-
这似乎没有任何改变。感谢您的建议