Я узнал, как писать текст на странице с помощью drawText, и многоугольник появляется в нужном месте с помощью drawPolygon.
Проблема в том, что когда я просто рисую текст, это работает, но как только я рисую полигоны, текст больше не рисуется.
Если я создаю два объекта 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();
}
}
Спасибо за вашу помощь