2012-06-20 13 views
15

Ho una filigrana che vorrei inserire nel mio pdf. La filigrana è un'immagine .bmp, ed è 2290 x 3026. Ho molti problemi a cercare di ridimensionare questa immagine per adattarla alla pagina, qualcuno ha qualche suggerimento?iText Image Resize

Document document = new Document(); 
PdfWriter.getInstance(document, new FileOutputStream("result.pdf")); 
document.open(); 
document.add(new Paragraph("hello")); 
document.close(); 
PdfReader reader = new PdfReader("result.pdf"); 
int number_of_pages = reader.getNumberOfPages(); 
PdfStamper pdfStamper = new PdfStamper(reader, new FileOutputStream("result_watermark.pdf")); 
// Get the PdfContentByte type by pdfStamper. 
Image watermark_image = Image.getInstance("abstract(0307).bmp"); 
int i = 0; 
watermark_image.setAbsolutePosition(0, 0); 
watermark_image.scaleToFit(826, 1100); 
System.out.println(watermark_image.getScaledWidth()); 
System.out.println(watermark_image.getScaledHeight()); 
PdfContentByte add_watermark; 
while (i < number_of_pages) { 
    i++; 
    add_watermark = pdfStamper.getUnderContent(i); 
    add_watermark.addImage(watermark_image); 
} 
pdfStamper.close(); 

Ecco l'output per i metodi getScaled().

826.0 - Width 
1091.4742 - Height 

Vorrei condividere l'immagine del pdf con voi ragazzi ma sfortunatamente non posso.

Devo provare a utilizzare invece un .jpg? Non so davvero quanto iText gestisca diverse estensioni di immagine.

+0

è possibile aggiungere schermate di PDF. Vedi http://meta.stackexchange.com/questions/75491/how-to-upload-an-image-to-a-post o http://meta.stackexchange.com/questions/57125/inserting-an-image -in-a-pre-tag – Ritesh

+0

Questo non è il problema. La filigrana che sto aggiungendo è una filigrana aziendale, e non posso passarla semplicemente in giro .. Beh, mi è stato detto di non farlo comunque. – Failsafe

+1

hai provato a ridimensionare manualmente l'immagine, anziché a livello di codice, e utilizzare l'immagine ridimensionata manualmente nel codice? dal momento che sembra che l'hard-disk della dimensione ridimensionata, ciò potrebbe risparmiare qualche elaborazione ogni volta che filigrana i documenti PDF. –

risposta

7

Si potrebbe utilizzare un altro approccio: ridimensionare l'immagine "manuale" (cioè attraverso un'elaborazione di immagini software) anziché programmaticamente tramite iText.

Poiché la dimensione finale sembra hardcoded, è possibile utilizzare un'immagine già ridimensionata e risparmiare tempo di elaborazione ogni volta che si filigrana i documenti PDF.

40

lo faccio così:

//if you would have a chapter indentation 
int indentation = 0; 
//whatever 
Image image = coolPic; 

float scaler = ((document.getPageSize().getWidth() - document.leftMargin() 
       - document.rightMargin() - indentation)/image.getWidth()) * 100; 

image.scalePercent(scaler); 

Forse vecchio stile ma funziona per me;)

+0

Purtroppo questo non funziona per me. Il più vicino che abbia mai avuto è stato: watermark_image.scalePercent (110 * 72/300); – Failsafe

+0

puoi descrivere esattamente qual è il tuo problema !? il ridimensionamento non funziona- ok ma qual è il tuo output con lo scaler che usi in quel momento !? –

+1

Questo approccio ha funzionato per me meglio dell'idea proposta da Alexis perché il ridimensionamento predefinito ha una risoluzione piuttosto bassa, quindi se ridimensionate l'immagine originale per adattarla al documento PDF, otterrete un'immagine a bassa risoluzione con pixel a 72 dpi equivalenti. Ma con il ridimensionamento, è possibile utilizzare un'immagine molto più grande ridimensionata per adattarsi ma preservando l'alta risoluzione. – Ted

17

uso

watermark_image.scaleAbsolute(826, 1100); 

invece di

watermark_image.scaleToFit(826, 1100); 
10

è possibile utilizzare

imageInstance.scaleAbsolute(requiredWidth, requiredHeight); 
+0

Grazie @ Coach005, semplice ma superbo !!!, l'ho votato. evviva –

8

Solo nel caso se l'altezza dell'immagine supera l'altezza del documento:

float documentWidth = document.getPageSize().width() - document.leftMargin() - document.rightMargin(); 
float documentHeight = document.getPageSize().height() - document.topMargin() - document.bottomMargin(); 
image.scaleToFit(documentWidth, documentHeight); 
+0

Questo è buono. Semplicemente scrivendo 'image.scaleToFit (PageSize.A4.getWidth(), PageSize.A4.getHeight());' può portare immagini più grandi a uscire dal bordo della pagina –

0
Document document = new Document(); 
    PdfWriter.getInstance(document, new FileOutputStream("F:\\Directory1\\sample1.pdf")); 
    document.open(); 

    Image img = Image.getInstance("F:\\Server\\Xyz\\WebContent\\ImageRestoring\\Rohit.jpg"); 
    img.scaleToFit(200, 200); 
    document.add(new Paragraph("Sample 1: This is simple image demo.")); 
    document.add(img); 
    document.close(); 
    System.out.println("Done"); 

// Il programma di cui sopra funziona perfettamente, con ridimensionamento dell'immagine, spero che lo troverete perfetto e possiamo ridimensionare qualsiasi formato di immagine.

+0

Puoi commentare perché questo risolve un problema di cinque anni con un accettato rispondi meglio delle altre risposte date? –

+0

Questo è stato per un lavoro che ho lasciato cinque anni fa ... Perché ti sei preso la briga di rispondere? – Failsafe

+0

scusa per aver risposto in ritardo, ma ho iniziato a lavorare professionalmente in questi 5 mesi, e ho avuto molto aiuto da questo sito, quindi, ho insegnato, dovrei restituire qualcosa a questo sito, fino alla mia capacità. –

Problemi correlati