Esempio n. 1
0
 public PdfObject getPdfObject(PdfWriter writer) {
   PdfArray array = new PdfArray(PdfName.LAB);
   PdfDictionary dictionary = new PdfDictionary();
   if (whitePoint == null
       || whitePoint.length != 3
       || whitePoint[0] < 0.000001f
       || whitePoint[2] < 0.000001f
       || whitePoint[1] < 0.999999f
       || whitePoint[1] > 1.000001f)
     throw new RuntimeException(MessageLocalization.getComposedMessage("lab.cs.white.point"));
   dictionary.put(PdfName.WHITEPOINT, new PdfArray(whitePoint));
   if (blackPoint != null) {
     if (blackPoint.length != 3
         || blackPoint[0] < -0.000001f
         || blackPoint[1] < -0.000001f
         || blackPoint[2] < -0.000001f)
       throw new RuntimeException(MessageLocalization.getComposedMessage("lab.cs.black.point"));
     dictionary.put(PdfName.BLACKPOINT, new PdfArray(blackPoint));
   }
   if (range != null) {
     if (range.length != 4 || range[0] > range[1] || range[2] > range[3])
       throw new RuntimeException(MessageLocalization.getComposedMessage("lab.cs.range"));
     dictionary.put(PdfName.RANGE, new PdfArray(range));
   }
   array.add(dictionary);
   return array;
 }
Esempio n. 2
0
 /**
  * Creates a submit form.
  *
  * @param file the URI to submit the form to
  * @param names the objects to submit
  * @param flags submit properties
  * @return A PdfAction
  */
 public static PdfAction createSubmitForm(String file, Object names[], int flags) {
   PdfAction action = new PdfAction();
   action.put(PdfName.S, PdfName.SUBMITFORM);
   PdfDictionary dic = new PdfDictionary();
   dic.put(PdfName.F, new PdfString(file));
   dic.put(PdfName.FS, PdfName.URL);
   action.put(PdfName.F, dic);
   if (names != null) action.put(PdfName.FIELDS, buildArray(names));
   action.put(PdfName.FLAGS, new PdfNumber(flags));
   return action;
 }
Esempio n. 3
0
 /**
  * Adds or replaces a page label.
  *
  * @param page the real page to start the numbering. First page is 1
  * @param numberStyle the numbering style such as LOWERCASE_ROMAN_NUMERALS
  * @param text the text to prefix the number. Can be <CODE>null</CODE> or empty
  * @param firstPage the first logical page number
  */
 public void addPageLabel(int page, int numberStyle, String text, int firstPage) {
   if (page < 1 || firstPage < 1)
     throw new IllegalArgumentException(
         MessageLocalization.getComposedMessage(
             "in.a.page.label.the.page.numbers.must.be.greater.or.equal.to.1"));
   PdfDictionary dic = new PdfDictionary();
   if (numberStyle >= 0 && numberStyle < numberingStyle.length)
     dic.put(PdfName.S, numberingStyle[numberStyle]);
   if (text != null) dic.put(PdfName.P, new PdfString(text, PdfObject.TEXT_UNICODE));
   if (firstPage != 1) dic.put(PdfName.ST, new PdfNumber(firstPage));
   map.put(Integer.valueOf(page - 1), dic);
 }
Esempio n. 4
0
 /**
  * Launches an application or a document.
  *
  * @param application the application to be launched or the document to be opened or printed.
  * @param parameters (Windows-specific) A parameter string to be passed to the application. It can
  *     be <CODE>null</CODE>.
  * @param operation (Windows-specific) the operation to perform: "open" - Open a document, "print"
  *     - Print a document. It can be <CODE>null</CODE>.
  * @param defaultDir (Windows-specific) the default directory in standard DOS syntax. It can be
  *     <CODE>null</CODE>.
  */
 public PdfAction(String application, String parameters, String operation, String defaultDir) {
   put(PdfName.S, PdfName.LAUNCH);
   if (parameters == null && operation == null && defaultDir == null)
     put(PdfName.F, new PdfString(application));
   else {
     PdfDictionary dic = new PdfDictionary();
     dic.put(PdfName.F, new PdfString(application));
     if (parameters != null) dic.put(PdfName.P, new PdfString(parameters));
     if (operation != null) dic.put(PdfName.O, new PdfString(operation));
     if (defaultDir != null) dic.put(PdfName.D, new PdfString(defaultDir));
     put(PdfName.WIN, dic);
   }
 }
Esempio n. 5
0
  /**
   * Translate a PRDictionary to a PdfDictionary. Also translate all of the objects contained in it.
   */
  protected PdfDictionary copyDictionary(PdfDictionary in)
      throws IOException, BadPdfFormatException {
    PdfDictionary out = new PdfDictionary();
    PdfObject type = PdfReader.getPdfObjectRelease(in.get(PdfName.TYPE));

    for (Object element : in.getKeys()) {
      PdfName key = (PdfName) element;
      PdfObject value = in.get(key);
      //	    System.out.println("Copy " + key);
      if (type != null && PdfName.PAGE.equals(type)) {
        if (!key.equals(PdfName.B) && !key.equals(PdfName.PARENT)) out.put(key, copyObject(value));
      } else out.put(key, copyObject(value));
    }
    return out;
  }
Esempio n. 6
0
  /** @see com.lowagie.tools.AbstractTool#execute() */
  public static void execute(String srcvalue, String destvalue, String rotvalue) {
    try {
      if (StringUtils.isBlank(srcvalue)) {
        throw new InstantiationException("You need to choose a sourcefile");
      }
      File src = new File(srcvalue);
      if (StringUtils.isBlank(destvalue)) {
        throw new InstantiationException("You need to choose a destination file");
      }
      File dest = new File(destvalue);
      if (StringUtils.isBlank(rotvalue)) {
        throw new InstantiationException("You need to choose a rotation");
      }
      int rotation = Integer.parseInt(rotvalue);

      // we create a reader for a certain document
      PdfReader reader = new PdfReader(src.getAbsolutePath());
      // we retrieve the total number of pages and the page size
      int total = reader.getNumberOfPages();
      System.out.println("There are " + total + " pages in the original file.");

      PdfDictionary pageDict;
      int currentRotation;
      for (int p = 1; p <= total; p++) {
        currentRotation = reader.getPageRotation(p);
        pageDict = reader.getPageN(p);
        pageDict.put(PdfName.ROTATE, new PdfNumber(currentRotation + rotation));
      }
      PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
      stamper.close();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
Esempio n. 7
0
 void createWidgets(ArrayList<Object> list, AcroFields.Item item) {
   for (int k = 0; k < item.size(); ++k) {
     list.add(item.getPage(k));
     PdfDictionary merged = item.getMerged(k);
     PdfObject dr = merged.get(PdfName.DR);
     if (dr != null)
       PdfFormField.mergeResources(resources, (PdfDictionary) PdfReader.getPdfObject(dr));
     PdfDictionary widget = new PdfDictionary();
     for (Object element : merged.getKeys()) {
       PdfName key = (PdfName) element;
       if (widgetKeys.containsKey(key)) widget.put(key, merged.get(key));
     }
     widget.put(iTextTag, new PdfNumber(item.getTabOrder(k).intValue() + 1));
     list.add(widget);
   }
 }
Esempio n. 8
0
  private File convertPdfToPdfA(final InputStream source) throws IOException, DocumentException {

    final File pdfAFile =
        TempFileProvider.createTempFile("digitalSigning-" + System.currentTimeMillis(), ".pdf");

    // Reads a PDF document.
    PdfReader reader = new PdfReader(source);
    // PdfStamper: Applies extra content to the pages of a PDF document. This extra content can be
    // all the objects allowed in
    // PdfContentByte including pages from other Pdfs.
    PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(pdfAFile));
    // A generic Document class.
    Document document = new Document();
    // we create a writer that listens to the document
    PdfWriter writer = stamper.getWriter();
    int numberPages = reader.getNumberOfPages();
    writer.setPDFXConformance(PdfWriter.PDFA1A);
    document.open();

    // PdfDictionary:A dictionary is an associative table containing pairs of objects.
    // The first element of each pair is called the key and the second  element is called the value
    // <CODE>PdfName</CODE> is an object that can be used as a name in a PDF-file
    PdfDictionary outi = new PdfDictionary(PdfName.OUTPUTINTENT);
    outi.put(PdfName.OUTPUTCONDITIONIDENTIFIER, new PdfString("sRGB IEC61966-2.1"));
    outi.put(PdfName.INFO, new PdfString("sRGB IEC61966-2.1"));
    outi.put(PdfName.S, PdfName.GTS_PDFA1);
    writer.getExtraCatalog().put(PdfName.OUTPUTINTENTS, new PdfArray(outi));

    // Add pages
    PdfImportedPage p = null;
    Image image;
    for (int i = 0; i < numberPages; i++) {
      p = writer.getImportedPage(reader, i + 1);
      image = Image.getInstance(p);
      document.add(image);
    }
    writer.createXmpMetadata();

    document.close();

    // Add Metadata from source pdf
    HashMap<String, String> info = reader.getInfo();
    stamper.setMoreInfo(info);
    stamper.close();

    return pdfAFile;
  }
Esempio n. 9
0
 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());
 }
Esempio n. 10
0
 PdfMediaClipData(String file, PdfFileSpecification fs, String mimeType) throws IOException {
   put(PdfName.TYPE, new PdfName("MediaClip"));
   put(PdfName.S, new PdfName("MCD"));
   put(PdfName.N, new PdfString("Media clip for " + file));
   put(new PdfName("CT"), new PdfString(mimeType));
   PdfDictionary dic = new PdfDictionary();
   dic.put(new PdfName("TF"), new PdfString("TEMPACCESS"));
   put(new PdfName("P"), dic);
   put(PdfName.D, fs.getReference());
 }
Esempio n. 11
0
 @SuppressWarnings("unchecked")
 void mergeField(String name, AcroFields.Item item) {
   HashMap<String, Object> map = fieldTree;
   StringTokenizer tk = new StringTokenizer(name, ".");
   if (!tk.hasMoreTokens()) return;
   while (true) {
     String s = tk.nextToken();
     Object obj = map.get(s);
     if (tk.hasMoreTokens()) {
       if (obj == null) {
         obj = new HashMap();
         map.put(s, obj);
         map = (HashMap<String, Object>) obj;
         continue;
       } else if (obj instanceof HashMap) map = (HashMap<String, Object>) obj;
       else return;
     } else {
       if (obj instanceof HashMap) return;
       PdfDictionary merged = item.getMerged(0);
       if (obj == null) {
         PdfDictionary field = new PdfDictionary();
         if (PdfName.SIG.equals(merged.get(PdfName.FT))) hasSignature = true;
         for (Object element : merged.getKeys()) {
           PdfName key = (PdfName) element;
           if (fieldKeys.containsKey(key)) field.put(key, merged.get(key));
         }
         ArrayList<Object> list = new ArrayList<Object>();
         list.add(field);
         createWidgets(list, item);
         map.put(s, list);
       } else {
         ArrayList<Object> list = (ArrayList<Object>) obj;
         PdfDictionary field = (PdfDictionary) list.get(0);
         PdfName type1 = (PdfName) field.get(PdfName.FT);
         PdfName type2 = (PdfName) merged.get(PdfName.FT);
         if (type1 == null || !type1.equals(type2)) return;
         int flag1 = 0;
         PdfObject f1 = field.get(PdfName.FF);
         if (f1 != null && f1.isNumber()) flag1 = ((PdfNumber) f1).intValue();
         int flag2 = 0;
         PdfObject f2 = merged.get(PdfName.FF);
         if (f2 != null && f2.isNumber()) flag2 = ((PdfNumber) f2).intValue();
         if (type1.equals(PdfName.BTN)) {
           if (((flag1 ^ flag2) & PdfFormField.FF_PUSHBUTTON) != 0) return;
           if ((flag1 & PdfFormField.FF_PUSHBUTTON) == 0
               && ((flag1 ^ flag2) & PdfFormField.FF_RADIO) != 0) return;
         } else if (type1.equals(PdfName.CH)) {
           if (((flag1 ^ flag2) & PdfFormField.FF_COMBO) != 0) return;
         }
         createWidgets(list, item);
       }
       return;
     }
   }
 }
Esempio n. 12
0
 /*
  * the getCatalog method is part of PdfWriter.
  * we wrap this so that we can extend it
  */
 @Override
 protected PdfDictionary getCatalog(PdfIndirectReference rootObj) {
   try {
     PdfDictionary theCat = pdf.getCatalog(rootObj);
     if (fieldArray == null) {
       if (acroForm != null) theCat.put(PdfName.ACROFORM, acroForm);
     } else addFieldResources(theCat);
     return theCat;
   } catch (IOException e) {
     throw new ExceptionConverter(e);
   }
 }
Esempio n. 13
0
 @Override
 protected PdfDictionary getCatalog(PdfIndirectReference rootObj) {
   try {
     PdfDictionary cat = pdf.getCatalog(rootObj);
     if (form != null) {
       PdfIndirectReference ref = addToBody(form).getIndirectReference();
       cat.put(PdfName.ACROFORM, ref);
     }
     return cat;
   } catch (IOException e) {
     throw new ExceptionConverter(e);
   }
 }
Esempio n. 14
0
 private Image indexedModel(byte bdata[], int bpc, int paletteEntries) throws BadElementException {
   Image img = new ImgRaw(width, height, 1, bpc, bdata);
   PdfArray colorspace = new PdfArray();
   colorspace.add(PdfName.INDEXED);
   colorspace.add(PdfName.DEVICERGB);
   byte np[] = getPalette(paletteEntries);
   int len = np.length;
   colorspace.add(new PdfNumber(len / 3 - 1));
   colorspace.add(new PdfString(np));
   PdfDictionary ad = new PdfDictionary();
   ad.put(PdfName.COLORSPACE, colorspace);
   img.setAdditional(ad);
   return img;
 }
Esempio n. 15
0
 /** Creates the new PDF by merging the fields and forms. */
 protected void closeIt() throws IOException {
   for (int k = 0; k < readers.size(); ++k) {
     readers.get(k).removeFields();
   }
   for (int r = 0; r < readers.size(); ++r) {
     PdfReader reader = readers.get(r);
     for (int page = 1; page <= reader.getNumberOfPages(); ++page) {
       pageRefs.add(getNewReference(reader.getPageOrigRef(page)));
       pageDics.add(reader.getPageN(page));
     }
   }
   mergeFields();
   createAcroForms();
   for (int r = 0; r < readers.size(); ++r) {
     PdfReader reader = readers.get(r);
     for (int page = 1; page <= reader.getNumberOfPages(); ++page) {
       PdfDictionary dic = reader.getPageN(page);
       PdfIndirectReference pageRef = getNewReference(reader.getPageOrigRef(page));
       PdfIndirectReference parent = root.addPageRef(pageRef);
       dic.put(PdfName.PARENT, parent);
       propagate(dic, pageRef, false);
     }
   }
   for (Map.Entry<PdfReader, IntHashtable> entry : readers2intrefs.entrySet()) {
     PdfReader reader = entry.getKey();
     try {
       file = reader.getSafeFile();
       file.reOpen();
       IntHashtable t = entry.getValue();
       int keys[] = t.toOrderedKeys();
       for (int k = 0; k < keys.length; ++k) {
         PRIndirectReference ref = new PRIndirectReference(reader, keys[k]);
         addToBody(PdfReader.getPdfObjectRelease(ref), t.get(keys[k]));
       }
     } finally {
       try {
         file.close();
         // TODO: Removed - the user should be responsible for closing all PdfReaders.  But, this
         // could cause a lot of memory leaks in code out there that hasn't been properly closing
         // things - maybe add a finalizer to PdfReader that calls PdfReader#close() ??
         //                    reader.close();
       } catch (Exception e) {
         // empty on purpose
       }
     }
   }
   pdf.close();
 }
Esempio n. 16
0
  private static void crop(String input) throws Exception {
    String output = input.replace(".pdf", "-crop.pdf");
    PdfReader reader = new PdfReader(input);
    final int n = reader.getNumberOfPages();
    Rectangle pageSize = reader.getPageSize(1);

    System.out.println("Input page size: " + pageSize);
    float left = (pageSize.getWidth() - kTextWidth) / 2 - kMargin;
    float right = pageSize.getWidth() - left;
    float bottom = (pageSize.getHeight() - kTextHeight) / 2;
    float top = pageSize.getHeight() - bottom;
    PdfRectangle rect = new PdfRectangle(left, bottom + kOffset, right, top + kOffset);
    for (int i = 1; i <= n; i++) {
      PdfDictionary pageDict = reader.getPageN(i);
      pageDict.put(PdfName.CROPBOX, rect);
    }
    PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(output));
    stamper.close();
  }
Esempio n. 17
0
  /**
   * Generates the font dictionary.
   *
   * @param descendant the descendant dictionary
   * @param subsetPrefix the subset prefix
   * @param toUnicode the ToUnicode stream
   * @return the stream
   */
  public PdfDictionary getFontBaseType(
      PdfIndirectReference descendant, String subsetPrefix, PdfIndirectReference toUnicode) {
    PdfDictionary dic = new PdfDictionary(PdfName.FONT);

    dic.put(PdfName.SUBTYPE, PdfName.TYPE0);
    // The PDF Reference manual advises to add -encoding to CID font names
    if (cff) dic.put(PdfName.BASEFONT, new PdfName(subsetPrefix + fontName + "-" + encoding));
    // dic.put(PdfName.BASEFONT, new PdfName(subsetPrefix+fontName));
    else dic.put(PdfName.BASEFONT, new PdfName(subsetPrefix + fontName));
    // dic.put(PdfName.BASEFONT, new PdfName(fontName));
    dic.put(PdfName.ENCODING, new PdfName(encoding));
    dic.put(PdfName.DESCENDANTFONTS, new PdfArray(descendant));
    if (toUnicode != null) dic.put(PdfName.TOUNICODE, toUnicode);
    return dic;
  }
Esempio n. 18
0
 protected void setColorSpace(BaseColor color) {
   cspace = color;
   int type = ExtendedColor.getType(color);
   PdfObject colorSpace = null;
   switch (type) {
     case ExtendedColor.TYPE_GRAY:
       {
         colorSpace = PdfName.DEVICEGRAY;
         break;
       }
     case ExtendedColor.TYPE_CMYK:
       {
         colorSpace = PdfName.DEVICECMYK;
         break;
       }
     case ExtendedColor.TYPE_SEPARATION:
       {
         SpotColor spot = (SpotColor) color;
         colorDetails = writer.addSimple(spot.getPdfSpotColor());
         colorSpace = colorDetails.getIndirectReference();
         break;
       }
     case ExtendedColor.TYPE_DEVICEN:
       {
         DeviceNColor deviceNColor = (DeviceNColor) color;
         colorDetails = writer.addSimple(deviceNColor.getPdfDeviceNColor());
         colorSpace = colorDetails.getIndirectReference();
         break;
       }
     case ExtendedColor.TYPE_PATTERN:
     case ExtendedColor.TYPE_SHADING:
       {
         throwColorSpaceError();
       }
     default:
       colorSpace = PdfName.DEVICERGB;
       break;
   }
   shading.put(PdfName.COLORSPACE, colorSpace);
 }
Esempio n. 19
0
 protected void createAcroForms() throws IOException {
   if (fieldTree.isEmpty()) return;
   form = new PdfDictionary();
   form.put(PdfName.DR, resources);
   propagate(resources, null, false);
   if (needAppearances) {
     form.put(PdfName.NEEDAPPEARANCES, PdfBoolean.PDFTRUE);
   }
   form.put(PdfName.DA, new PdfString("/Helv 0 Tf 0 g "));
   tabOrder = new HashMap<PdfArray, ArrayList<Integer>>();
   calculationOrderRefs = new ArrayList<Object>(calculationOrder);
   form.put(PdfName.FIELDS, branchForm(fieldTree, null, ""));
   if (hasSignature) form.put(PdfName.SIGFLAGS, new PdfNumber(3));
   PdfArray co = new PdfArray();
   for (int k = 0; k < calculationOrderRefs.size(); ++k) {
     Object obj = calculationOrderRefs.get(k);
     if (obj instanceof PdfIndirectReference) co.add((PdfIndirectReference) obj);
   }
   if (co.size() > 0) form.put(PdfName.CO, co);
 }
 /**
  * Text that shall be used as the decimal position in displaying numerical values. An empty string
  * indicates that the default shall be used.<br>
  * Default value: PERIOD "\u002E"
  *
  * @param dc
  */
 public void setDecimalChartacter(PdfString dc) {
   super.put(PdfName.RD, dc);
 }
Esempio n. 21
0
 /**
  * Constructs a <CODE>PdfDictionary</CODE>-object of a certain type.
  *
  * @param type a <CODE>PdfName</CODE>
  */
 public PdfDictionary(final PdfName type) {
   this();
   dictionaryType = type;
   put(PdfName.TYPE, dictionaryType);
 }
 /**
  * Text that shall be concatenated after the label specified by setLabel. An empty string
  * indicates that no text shall be added.<br>
  * Default value: A single ASCII SPACE character "\u0020"
  *
  * @param ss
  */
 public void setLabelRightString(PdfString ss) {
   super.put(PdfName.SS, ss);
 }
 /**
  * Text that shall be concatenated to the left of the label specified by setLabel. An empty string
  * indicates that no text shall be added.<br>
  * Default value: A single ASCII SPACE character "\u0020"
  *
  * @param ps
  */
 public void setLabelLeftString(PdfString ps) {
   super.put(PdfName.PS, ps);
 }
 /**
  * A text string specifying a label for displaying the units represented by this NumberFormat in a
  * user interface; the label should use a universally recognized abbreviation.
  *
  * @param label
  */
 public void setLabel(PdfString label) {
   super.put(PdfName.U, label);
 }
 /**
  * A name indicating the position of the label specified by setLabel with respect to the
  * calculated unit value. The characters specified by setLabelLeftString and setLabelRightString
  * shall be concatenated before considering this entry. Default value: suffix.
  *
  * @param pos PdfName.S or PdfName.P
  */
 public void setLabelPosition(PdfName pos) {
   super.put(PdfName.O, pos);
 }
 /**
  * The conversion factor used to multiply a value in partial units of the previous number format
  * array element to obtain a value in the units of this dictionary. When this entry is in the
  * first number format in the array, its meaning (that is, what it shall be multiplied by) depends
  * on which entry in the RectilinearMeasure references the NumberFormat array.
  *
  * @param n
  */
 public void setConversionFactor(PdfNumber n) {
   super.put(PdfName.C, n);
 }
 /**
  * Indicate whether and in what manner to display a fractional value from the result of converting
  * to the units of this NumberFormat means of the conversion factor entry.
  *
  * @param f
  */
 public void setFractionalValue(Fraction f) {
   super.put(PdfName.F, f.getPdfName());
 }
Esempio n. 28
0
 /**
  * Associates the specified <CODE>PdfObject</CODE> as value to the specified <CODE>PdfName</CODE>
  * as key in this map.
  *
  * <p>If the <VAR>value</VAR> is a <CODE>PdfNull</CODE>, it is treated just as any other <CODE>
  * PdfObject</CODE>. If the <VAR>value</VAR> is <CODE>null</CODE> however nothing is done.
  *
  * @param key a <CODE>PdfName</CODE>
  * @param value the <CODE>PdfObject</CODE> to be associated to the <VAR>key</VAR>
  */
 public void putEx(final PdfName key, final PdfObject value) {
   if (value == null) return;
   put(key, value);
 }
Esempio n. 29
0
 /**
  * Generates the CIDFontTyte2 dictionary.
  *
  * @param fontDescriptor the indirect reference to the font descriptor
  * @param subsetPrefix the subset prefix
  * @param metrics the horizontal width metrics
  * @return a stream
  */
 public PdfDictionary getCIDFontType2(
     PdfIndirectReference fontDescriptor, String subsetPrefix, Object metrics[]) {
   PdfDictionary dic = new PdfDictionary(PdfName.FONT);
   // sivan; cff
   if (cff) {
     dic.put(PdfName.SUBTYPE, PdfName.CIDFONTTYPE0);
     dic.put(PdfName.BASEFONT, new PdfName(subsetPrefix + fontName + "-" + encoding));
   } else {
     dic.put(PdfName.SUBTYPE, PdfName.CIDFONTTYPE2);
     dic.put(PdfName.BASEFONT, new PdfName(subsetPrefix + fontName));
   }
   dic.put(PdfName.FONTDESCRIPTOR, fontDescriptor);
   if (!cff) dic.put(PdfName.CIDTOGIDMAP, PdfName.IDENTITY);
   PdfDictionary cdic = new PdfDictionary();
   cdic.put(PdfName.REGISTRY, new PdfString("Adobe"));
   cdic.put(PdfName.ORDERING, new PdfString("Identity"));
   cdic.put(PdfName.SUPPLEMENT, new PdfNumber(0));
   dic.put(PdfName.CIDSYSTEMINFO, cdic);
   if (!vertical) {
     dic.put(PdfName.DW, new PdfNumber(1000));
     StringBuffer buf = new StringBuffer("[");
     int lastNumber = -10;
     boolean firstTime = true;
     for (int k = 0; k < metrics.length; ++k) {
       int metric[] = (int[]) metrics[k];
       if (metric[1] == 1000) continue;
       int m = metric[0];
       if (m == lastNumber + 1) {
         buf.append(' ').append(metric[1]);
       } else {
         if (!firstTime) {
           buf.append(']');
         }
         firstTime = false;
         buf.append(m).append('[').append(metric[1]);
       }
       lastNumber = m;
     }
     if (buf.length() > 1) {
       buf.append("]]");
       dic.put(PdfName.W, new PdfLiteral(buf.toString()));
     }
   }
   return dic;
 }
Esempio n. 30
0
 public void addToBody() throws IOException {
   if (bBox != null) shading.put(PdfName.BBOX, new PdfArray(bBox));
   if (antiAlias) shading.put(PdfName.ANTIALIAS, PdfBoolean.PDFTRUE);
   writer.addToBody(shading, getShadingReference());
 }