コード例 #1
0
ファイル: PdfCopy.java プロジェクト: thomashunziker/SIAPDF
 public void alterContents() throws IOException {
   if (over == null && under == null) return;
   PdfArray ar = null;
   PdfObject content = PdfReader.getPdfObject(pageN.get(PdfName.CONTENTS), pageN);
   if (content == null) {
     ar = new PdfArray();
     pageN.put(PdfName.CONTENTS, ar);
   } else if (content.isArray()) {
     ar = (PdfArray) content;
   } else if (content.isStream()) {
     ar = new PdfArray();
     ar.add(pageN.get(PdfName.CONTENTS));
     pageN.put(PdfName.CONTENTS, ar);
   } else {
     ar = new PdfArray();
     pageN.put(PdfName.CONTENTS, ar);
   }
   ByteBuffer out = new ByteBuffer();
   if (under != null) {
     out.append(PdfContents.SAVESTATE);
     applyRotation(pageN, out);
     out.append(under.getInternalBuffer());
     out.append(PdfContents.RESTORESTATE);
   }
   if (over != null) out.append(PdfContents.SAVESTATE);
   PdfStream stream = new PdfStream(out.toByteArray());
   stream.flateCompress(cstp.getCompressionLevel());
   PdfIndirectReference ref1 = cstp.addToBody(stream).getIndirectReference();
   ar.addFirst(ref1);
   out.reset();
   if (over != null) {
     out.append(' ');
     out.append(PdfContents.RESTORESTATE);
     out.append(PdfContents.SAVESTATE);
     applyRotation(pageN, out);
     out.append(over.getInternalBuffer());
     out.append(PdfContents.RESTORESTATE);
     stream = new PdfStream(out.toByteArray());
     stream.flateCompress(cstp.getCompressionLevel());
     ar.add(cstp.addToBody(stream).getIndirectReference());
   }
   pageN.put(PdfName.RESOURCES, pageResources.getResources());
 }
コード例 #2
0
ファイル: DocumentFont.java プロジェクト: dquangsinh/fb2pdf
 private IntHashtable readWidths(PdfArray ws) {
   IntHashtable hh = new IntHashtable();
   if (ws == null) return hh;
   for (int k = 0; k < ws.size(); ++k) {
     int c1 = ((PdfNumber) PdfReader.getPdfObjectRelease(ws.getPdfObject(k))).intValue();
     PdfObject obj = PdfReader.getPdfObjectRelease(ws.getPdfObject(++k));
     if (obj.isArray()) {
       PdfArray a2 = (PdfArray) obj;
       for (int j = 0; j < a2.size(); ++j) {
         int c2 = ((PdfNumber) PdfReader.getPdfObjectRelease(a2.getPdfObject(j))).intValue();
         hh.put(c1++, c2);
       }
     } else {
       int c2 = ((PdfNumber) obj).intValue();
       int w = ((PdfNumber) PdfReader.getPdfObjectRelease(ws.getPdfObject(++k))).intValue();
       for (; c1 <= c2; ++c1) hh.put(c1, w);
     }
   }
   return hh;
 }
コード例 #3
0
ファイル: PdfCopy.java プロジェクト: thomashunziker/SIAPDF
 public void addAnnotation(PdfAnnotation annot) {
   try {
     ArrayList allAnnots = new ArrayList();
     if (annot.isForm()) {
       PdfFormField field = (PdfFormField) annot;
       if (field.getParent() != null) return;
       expandFields(field, allAnnots);
       if (cstp.fieldTemplates == null) cstp.fieldTemplates = new HashMap();
     } else allAnnots.add(annot);
     for (int k = 0; k < allAnnots.size(); ++k) {
       annot = (PdfAnnotation) allAnnots.get(k);
       if (annot.isForm()) {
         if (!annot.isUsed()) {
           HashMap templates = annot.getTemplates();
           if (templates != null) cstp.fieldTemplates.putAll(templates);
         }
         PdfFormField field = (PdfFormField) annot;
         if (field.getParent() == null) addDocumentField(field.getIndirectReference());
       }
       if (annot.isAnnotation()) {
         PdfObject pdfobj = PdfReader.getPdfObject(pageN.get(PdfName.ANNOTS), pageN);
         PdfArray annots = null;
         if (pdfobj == null || !pdfobj.isArray()) {
           annots = new PdfArray();
           pageN.put(PdfName.ANNOTS, annots);
         } else annots = (PdfArray) pdfobj;
         annots.add(annot.getIndirectReference());
         if (!annot.isUsed()) {
           PdfRectangle rect = (PdfRectangle) annot.get(PdfName.RECT);
           if (rect != null
               && (rect.left() != 0
                   || rect.right() != 0
                   || rect.top() != 0
                   || rect.bottom() != 0)) {
             int rotation = reader.getPageRotation(pageN);
             Rectangle pageSize = reader.getPageSizeWithRotation(pageN);
             switch (rotation) {
               case 90:
                 annot.put(
                     PdfName.RECT,
                     new PdfRectangle(
                         pageSize.getTop() - rect.bottom(),
                         rect.left(),
                         pageSize.getTop() - rect.top(),
                         rect.right()));
                 break;
               case 180:
                 annot.put(
                     PdfName.RECT,
                     new PdfRectangle(
                         pageSize.getRight() - rect.left(),
                         pageSize.getTop() - rect.bottom(),
                         pageSize.getRight() - rect.right(),
                         pageSize.getTop() - rect.top()));
                 break;
               case 270:
                 annot.put(
                     PdfName.RECT,
                     new PdfRectangle(
                         rect.bottom(),
                         pageSize.getRight() - rect.left(),
                         rect.top(),
                         pageSize.getRight() - rect.right()));
                 break;
             }
           }
         }
       }
       if (!annot.isUsed()) {
         annot.setUsed();
         cstp.addToBody(annot, annot.getIndirectReference());
       }
     }
   } catch (IOException e) {
     throw new ExceptionConverter(e);
   }
 }
コード例 #4
0
ファイル: PdfArray.java プロジェクト: sunrenjie/itext
 /**
  * Returns a <CODE>PdfObject</CODE> as a <CODE>PdfArray</CODE>, resolving indirect references.
  *
  * <p>The object corresponding to the specified index is retrieved and resolved to a direct
  * object. If it is a <CODE>PdfArray</CODE>, it is cast down and returned as such. Otherwise
  * <CODE>null</CODE> is returned.
  *
  * @param idx The index of the <CODE>PdfObject</CODE> to be returned
  * @return the corresponding <CODE>PdfArray</CODE> object, or <CODE>null</CODE>
  */
 public PdfArray getAsArray(final int idx) {
   PdfArray array = null;
   PdfObject orig = getDirectObject(idx);
   if (orig != null && orig.isArray()) array = (PdfArray) orig;
   return array;
 }
コード例 #5
0
ファイル: PdfDictionary.java プロジェクト: dquangsinh/fb2pdf
 /**
  * Returns a <CODE>PdfObject</CODE> as a <CODE>PdfArray</CODE>, resolving indirect references.
  *
  * <p>The object associated with the <CODE>PdfName</CODE> given is retrieved and resolved to a
  * direct object. If it is a <CODE>PdfArray</CODE>, it is cast down and returned as such.
  * Otherwise <CODE>null</CODE> is returned.
  *
  * @param key A <CODE>PdfName</CODE>
  * @return the associated <CODE>PdfArray</CODE> object, or <CODE>null</CODE>
  */
 public PdfArray getAsArray(final PdfName key) {
   PdfArray array = null;
   PdfObject orig = getDirectObject(key);
   if (orig != null && orig.isArray()) array = (PdfArray) orig;
   return array;
 }