drawTextを使ってページにテキストを書き込む方法を見つけたので、drawPolygonを使って適切な場所にポリゴンが表示されます。PDFBoxでテキストをploygonに書き込む
問題は、テキストを描画すると機能しますが、ポリゴンを描画するとすぐにテキストが描画されなくなるという問題があります。
2つのPDPageContentStreamオブジェクト(テキスト用とポリゴン用)を作成すると、ポリゴンはもう描画されません。
ここは私のテストクラスです。すべてのPDFはテストのために行う必要があります。
package ch.sertal.vision.server.helpers;
import ch.sertal.vision.BaseDaoTest;
import org.apache.pdfbox.exceptions.COSVisitorException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.edit.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDType1Font;
import org.testng.annotations.Test;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URISyntaxException;
/**
* Created by IntelliJ IDEA.
* User: micha.roon
* Date: 11/13/11
* Time: 11:22 PM
* To change this template use File | Settings | File Templates.
*/
public class WritePDFTest extends BaseDaoTest {
@Test
public void testTextPlacement() throws IOException, COSVisitorException, URISyntaxException {
File pdfFile = new File(this.getClass().getResource("/META-INF/menge-regierapport.pdf").toURI());
PDDocument doc = PDDocument.load(pdfFile);
PDPage page = null;
for (Object kid : doc.getDocumentCatalog().getPages().getKids()) {
if (kid instanceof PDPage) {
page = (PDPage) kid;
break;
}
}
PDPageContentStream rectContent = new PDPageContentStream(doc, page, true, false);
rectContent.setNonStrokingColor(Color.blue);
PDPageContentStream content = new PDPageContentStream(doc, page, true, false);
writeOnPage(content, String.valueOf(page.getArtBox().getHeight()), 0, 0);
writeOnPage(content, String.valueOf(page.getArtBox().getWidth()), 200, 100);
rectContent.fillRect(100, 200, 100, 50);
content.close();
doc.save(new FileOutputStream(
new File(this.getClass().getResource("/META-INF/menge-regierapport.pdf").toURI())));
doc.close();
}
void writeOnPage(PDPageContentStream content, String text, int x, int y) throws IOException {
content.beginText();
content.setFont(PDType1Font.HELVETICA, 10);
content.moveTextPositionByAmount(x, y);
content.drawString(text);
content.endText();
}
}
あなたの主な問題は、あなたがrectContent.close()
を呼び出すことはありませんということであるあなたの助け
「rectContent」を閉じていないようです。 – mkl