2016-04-14 6 views
2

Использование iTextSharp для добавления контента в формате PDF, я могу добавить изображение другого PDF, используя следующий код:iTextSharp: Как добавить изображение PDF в качестве подвижного элемента?

void addImageFromPDF(string inputPath, string imagePath, string outputPath, int pageNumber) 
    { 
     PdfReader pdfReader_image = new PdfReader(imagePath); 
     PdfReader pdfReader = new PdfReader(inputPath); 
     PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileStream(outputPath, FileMode.Create)); 
     PdfImportedPage page = pdfStamper.GetImportedPage(pdfReader_image, 1); 
     pdfStamper.GetOverContent(pageNumber).AddTemplate(page, 100, 100); 
     pdfStamper.Close(); 
    } 

Однако, это добавляет изображения PDF в виде статического элемента - я могу Нажмите один раз, чтобы выделить его, а затем перетащите его или удалите, как я могу с помощью аннотации. Есть ли способ создать PdfAnnotation (или сравнительно подвижный графический элемент), который содержит PdfImportedPage в качестве его содержимого?

+0

Вы уверены, что это разрешено в спецификации PDF? – usr2564301

+0

@RadLexus, да. Если вы создаете персонализированную печать, источник которой является PDF-изображением, вы можете отпечатать это изображение в другом PDF-документе, а затем перетащить его. – sigil

+0

@RadLexus Пожалуйста, взгляните на этот PDF-файл и переместите логотип iText: http://gitlab.itextsupport.com/itext/sandbox/raw/master/cmpfiles/annotations/cmp_stamp_annotation.pdf –

ответ

3

Пожалуйста, взгляните на документ stamp_annotation.pdf. Этот документ содержит аннотацию штампа с логотипом iText. Поскольку это аннотация, ее может перемещать пользователь, который просматривает документ в Adobe Reader (это может не сработать корректно в других программах просмотра PDF).

Кода для этого примера можно найти здесь: AddStamp

public void manipulatePdf(String src, String dest) throws IOException, DocumentException { 
    PdfReader reader = new PdfReader(src); 
    PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest)); 
    Image img = Image.getInstance(IMG); 
    float w = img.getScaledWidth(); 
    float h = img.getScaledHeight(); 
    Rectangle location = new Rectangle(36, 770 - h, 36 + w, 770); 
    PdfAnnotation stamp = PdfAnnotation.createStamp(
      stamper.getWriter(), location, null, "ITEXT");      
    img.setAbsolutePosition(0, 0); 
    PdfContentByte cb = stamper.getOverContent(1); 
    PdfAppearance app = cb.createAppearance(w, h); 
    app.addImage(img); 
    stamp.setAppearance(PdfName.N, app); 
    stamp.setFlags(PdfAnnotation.FLAGS_PRINT); 
    stamper.addAnnotation(stamp, 1); 
    stamper.close(); 
    reader.close(); 
} 

В этом примере мы добавим штамп аннотации к существующему документу. Если вы создаете документ с нуля, вам необходимо заменить stamper.getWriter() на writer, stamper.getOverContent(1) на writer.getDirectContent() и stamper.addAnnotation(stamp, 1) на writer.addAnnotation(stamp).

Смежные вопросы