pdfrb 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.rspec +2 -0
- data/.rubocop.yml +22 -0
- data/.rubocop_todo.yml +819 -0
- data/.yardopts +4 -0
- data/CHANGELOG.md +226 -0
- data/CLAUDE.md +110 -0
- data/Gemfile +13 -0
- data/LICENSE +25 -0
- data/README.adoc +88 -0
- data/Rakefile +45 -0
- data/benchmarks/bench.rb +49 -0
- data/data/pdfrb/afm/Courier-Bold.afm +342 -0
- data/data/pdfrb/afm/Courier-BoldOblique.afm +342 -0
- data/data/pdfrb/afm/Courier-Oblique.afm +342 -0
- data/data/pdfrb/afm/Courier.afm +342 -0
- data/data/pdfrb/afm/Helvetica-Bold.afm +2827 -0
- data/data/pdfrb/afm/Helvetica-BoldOblique.afm +2827 -0
- data/data/pdfrb/afm/Helvetica-Oblique.afm +3051 -0
- data/data/pdfrb/afm/Helvetica.afm +3051 -0
- data/data/pdfrb/afm/Symbol.afm +213 -0
- data/data/pdfrb/afm/Times-Bold.afm +2588 -0
- data/data/pdfrb/afm/Times-BoldItalic.afm +2384 -0
- data/data/pdfrb/afm/Times-Italic.afm +2667 -0
- data/data/pdfrb/afm/Times-Roman.afm +2419 -0
- data/data/pdfrb/afm/ZapfDingbats.afm +225 -0
- data/data/pdfrb/arlington/latest/3DActivation.tsv +10 -0
- data/data/pdfrb/arlington/latest/3DAnimationStyle.tsv +5 -0
- data/data/pdfrb/arlington/latest/3DBackground.tsv +6 -0
- data/data/pdfrb/arlington/latest/3DCrossSection.tsv +11 -0
- data/data/pdfrb/arlington/latest/3DLightingScheme.tsv +3 -0
- data/data/pdfrb/arlington/latest/3DMeasure3DC.tsv +12 -0
- data/data/pdfrb/arlington/latest/3DMeasureAD3.tsv +21 -0
- data/data/pdfrb/arlington/latest/3DMeasureLD3.tsv +18 -0
- data/data/pdfrb/arlington/latest/3DMeasurePD3.tsv +19 -0
- data/data/pdfrb/arlington/latest/3DMeasureRD3.tsv +23 -0
- data/data/pdfrb/arlington/latest/3DNode.tsv +9 -0
- data/data/pdfrb/arlington/latest/3DReference.tsv +3 -0
- data/data/pdfrb/arlington/latest/3DRenderMode.tsv +7 -0
- data/data/pdfrb/arlington/latest/3DStream.tsv +16 -0
- data/data/pdfrb/arlington/latest/3DUnits.tsv +10 -0
- data/data/pdfrb/arlington/latest/3DView.tsv +17 -0
- data/data/pdfrb/arlington/latest/3DViewAddEntries.tsv +19 -0
- data/data/pdfrb/arlington/latest/AAPL_ST.tsv +7 -0
- data/data/pdfrb/arlington/latest/AFEmbeddedFileParameter.tsv +6 -0
- data/data/pdfrb/arlington/latest/AFEmbeddedFileStream.tsv +12 -0
- data/data/pdfrb/arlington/latest/AFFileSpecEF.tsv +3 -0
- data/data/pdfrb/arlington/latest/AFFileSpecification.tsv +17 -0
- data/data/pdfrb/arlington/latest/ActionECMAScript.tsv +5 -0
- data/data/pdfrb/arlington/latest/ActionGoTo.tsv +6 -0
- data/data/pdfrb/arlington/latest/ActionGoTo3DView.tsv +6 -0
- data/data/pdfrb/arlington/latest/ActionGoToDp.tsv +5 -0
- data/data/pdfrb/arlington/latest/ActionGoToE.tsv +8 -0
- data/data/pdfrb/arlington/latest/ActionGoToR.tsv +8 -0
- data/data/pdfrb/arlington/latest/ActionHide.tsv +6 -0
- data/data/pdfrb/arlington/latest/ActionImportData.tsv +5 -0
- data/data/pdfrb/arlington/latest/ActionLaunch.tsv +9 -0
- data/data/pdfrb/arlington/latest/ActionMovie.tsv +7 -0
- data/data/pdfrb/arlington/latest/ActionNOP.tsv +4 -0
- data/data/pdfrb/arlington/latest/ActionNamed.tsv +5 -0
- data/data/pdfrb/arlington/latest/ActionRendition.tsv +8 -0
- data/data/pdfrb/arlington/latest/ActionResetForm.tsv +6 -0
- data/data/pdfrb/arlington/latest/ActionRichMediaExecute.tsv +7 -0
- data/data/pdfrb/arlington/latest/ActionSetOCGState.tsv +6 -0
- data/data/pdfrb/arlington/latest/ActionSetState.tsv +6 -0
- data/data/pdfrb/arlington/latest/ActionSound.tsv +9 -0
- data/data/pdfrb/arlington/latest/ActionSubmitForm.tsv +8 -0
- data/data/pdfrb/arlington/latest/ActionThread.tsv +7 -0
- data/data/pdfrb/arlington/latest/ActionTransition.tsv +5 -0
- data/data/pdfrb/arlington/latest/ActionURI.tsv +6 -0
- data/data/pdfrb/arlington/latest/AddActionCatalog.tsv +6 -0
- data/data/pdfrb/arlington/latest/AddActionFormField.tsv +5 -0
- data/data/pdfrb/arlington/latest/AddActionPageObject.tsv +3 -0
- data/data/pdfrb/arlington/latest/AddActionScreenAnnotation.tsv +9 -0
- data/data/pdfrb/arlington/latest/AddActionWidgetAnnotation.tsv +11 -0
- data/data/pdfrb/arlington/latest/AlternateImage.tsv +4 -0
- data/data/pdfrb/arlington/latest/Annot3D.tsv +27 -0
- data/data/pdfrb/arlington/latest/AnnotCaret.tsv +31 -0
- data/data/pdfrb/arlington/latest/AnnotCircle.tsv +33 -0
- data/data/pdfrb/arlington/latest/AnnotFileAttachment.tsv +31 -0
- data/data/pdfrb/arlington/latest/AnnotFreeText.tsv +37 -0
- data/data/pdfrb/arlington/latest/AnnotHighlight.tsv +30 -0
- data/data/pdfrb/arlington/latest/AnnotInk.tsv +32 -0
- data/data/pdfrb/arlington/latest/AnnotLine.tsv +40 -0
- data/data/pdfrb/arlington/latest/AnnotLink.tsv +27 -0
- data/data/pdfrb/arlington/latest/AnnotMovie.tsv +23 -0
- data/data/pdfrb/arlington/latest/AnnotPolyLine.tsv +36 -0
- data/data/pdfrb/arlington/latest/AnnotPolygon.tsv +36 -0
- data/data/pdfrb/arlington/latest/AnnotPopup.tsv +22 -0
- data/data/pdfrb/arlington/latest/AnnotPrinterMark.tsv +21 -0
- data/data/pdfrb/arlington/latest/AnnotProjection.tsv +29 -0
- data/data/pdfrb/arlington/latest/AnnotRedact.tsv +36 -0
- data/data/pdfrb/arlington/latest/AnnotRichMedia.tsv +22 -0
- data/data/pdfrb/arlington/latest/AnnotScreen.tsv +24 -0
- data/data/pdfrb/arlington/latest/AnnotSound.tsv +31 -0
- data/data/pdfrb/arlington/latest/AnnotSquare.tsv +33 -0
- data/data/pdfrb/arlington/latest/AnnotSquiggly.tsv +30 -0
- data/data/pdfrb/arlington/latest/AnnotStamp.tsv +30 -0
- data/data/pdfrb/arlington/latest/AnnotStrikeOut.tsv +30 -0
- data/data/pdfrb/arlington/latest/AnnotText.tsv +33 -0
- data/data/pdfrb/arlington/latest/AnnotTrapNetwork.tsv +24 -0
- data/data/pdfrb/arlington/latest/AnnotUnderline.tsv +30 -0
- data/data/pdfrb/arlington/latest/AnnotWatermark.tsv +21 -0
- data/data/pdfrb/arlington/latest/AnnotWidget.tsv +32 -0
- data/data/pdfrb/arlington/latest/Appearance.tsv +4 -0
- data/data/pdfrb/arlington/latest/AppearanceCharacteristics.tsv +12 -0
- data/data/pdfrb/arlington/latest/AppearancePrinterMark.tsv +4 -0
- data/data/pdfrb/arlington/latest/AppearancePrinterMarkSubDict.tsv +2 -0
- data/data/pdfrb/arlington/latest/AppearanceSubDict.tsv +2 -0
- data/data/pdfrb/arlington/latest/AppearanceTrapNet.tsv +4 -0
- data/data/pdfrb/arlington/latest/AppearanceTrapNetSubDict.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOf3DCrossSection.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOf3DMeasure.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOf3DNode.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOf3DTransMatrix.tsv +13 -0
- data/data/pdfrb/arlington/latest/ArrayOf3DView.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOf3DViewAddEntries.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOf3PDUNames.tsv +4 -0
- data/data/pdfrb/arlington/latest/ArrayOf4Functions.tsv +5 -0
- data/data/pdfrb/arlington/latest/ArrayOfAFFileSpecifications.tsv +3 -0
- data/data/pdfrb/arlington/latest/ArrayOfActionHideAnnots.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfActions.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfAnnotStates.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfAnnots.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfArraysInkList.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfArraysPaths.tsv +3 -0
- data/data/pdfrb/arlington/latest/ArrayOfArraysRBGroups.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfArraysURLStrings.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfArraysXPTSValues.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfAttributeObjects.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfAttributeRevisions.tsv +3 -0
- data/data/pdfrb/arlington/latest/ArrayOfBeads.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfBlendModes.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfBooleansGeneral.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfCIDGlyphMetricsW.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfCIDGlyphMetricsW2.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfCIP4_AssemblingIntent.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfCIP4_AssemblyItem.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfCIP4_BindIn.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfCIP4_BindingIntent.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfCIP4_BlowIn.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfCIP4_ChannelUsage.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfCIP4_Coatings.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfCIP4_ColorIntent.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfCIP4_ComChannel.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfCIP4_ContactTypes.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfCIP4_FinishedDimensions.tsv +4 -0
- data/data/pdfrb/arlington/latest/ArrayOfCIP4_FoldingIntent.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfCIP4_HoleMakingIntent.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfCIP4_HolePattern.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfCIP4_LABColorValue.tsv +4 -0
- data/data/pdfrb/arlington/latest/ArrayOfCIP4_LayoutIntent.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfCIP4_MediaIntent.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfCIP4_PrintProcess.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfCIP4_ProductionIntent.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfCIP4_Resource.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfCIP4_StickOn.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfClassNamesRevisions.tsv +3 -0
- data/data/pdfrb/arlington/latest/ArrayOfCompressionFilterNames.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfDPartArrays.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfDParts.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfDashPatterns.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfDecodeParams.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfDescendantFonts.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfDevExtensions.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfDifferences.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfDigestMethod.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfDuration.tsv +3 -0
- data/data/pdfrb/arlington/latest/ArrayOfFieldChoiceOpt.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfFieldID.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfFields.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfFileSpecifications.tsv +3 -0
- data/data/pdfrb/arlington/latest/ArrayOfFilterNames.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfFontAndSize.tsv +3 -0
- data/data/pdfrb/arlington/latest/ArrayOfFonts.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfFunctions.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfGSPDashPatterns.tsv +3 -0
- data/data/pdfrb/arlington/latest/ArrayOfImageAlternates.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfIndirectFileSpecifications.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfIntegersGeneral.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfIntegersGreaterThanZero.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfMediaPlayerInfo.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfNamesForEnforce.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfNamesForPrintingOrder.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfNamesForProcSet.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfNamesGeneral.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfNamesInPtData.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfNamespace.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfNavigatorLayoutNames.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfNonNegativeIntegersGeneral.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfNumberFormats.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfNumbersGeneral.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfOCConfig.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfOCG.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfOCGState.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfOCGindirect.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfOCUsage.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfOPI13Color.tsv +6 -0
- data/data/pdfrb/arlington/latest/ArrayOfOPI2Inks.tsv +4 -0
- data/data/pdfrb/arlington/latest/ArrayOfOptContentGroups.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfOptContentOrderElements.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfOptContentOrders.tsv +3 -0
- data/data/pdfrb/arlington/latest/ArrayOfOutputIntents.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfPageTreeNodeKids.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfPages.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfPaths.tsv +7 -0
- data/data/pdfrb/arlington/latest/ArrayOfQuadPoints.tsv +9 -0
- data/data/pdfrb/arlington/latest/ArrayOfRenditions.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfRequirements.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfRequirementsHandlers.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfRichMediaConfiguration.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfRichMediaCuePoints.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfRichMediaInstances.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfSignatureReferences.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfSignatureSubFilterNames.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfSoftwareIdentifiers.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfSoftwareVersions.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfSourceInformation.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfStreamsGeneral.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfStringsASCII.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfStringsByte.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfStringsText.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfStringsTextOrNames.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfStructElem.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfStructElemKids.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfStructElemParentTree.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfSubjectDN.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfTags.tsv +3 -0
- data/data/pdfrb/arlington/latest/ArrayOfThreads.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfTrapNetVersionObjects.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfTrapRegions.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfURLStrings.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfURLs.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfUserProperty.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfViewParams.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfViewports.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfWebCaptureCommands.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfWebCaptureImages.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfWebCapturePages.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfXFA.tsv +3 -0
- data/data/pdfrb/arlington/latest/ArrayOfXPTSValues.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOfXRefIndexIntegers.tsv +3 -0
- data/data/pdfrb/arlington/latest/ArrayOfXRefWIntegers.tsv +4 -0
- data/data/pdfrb/arlington/latest/ArrayOf_2Booleans.tsv +3 -0
- data/data/pdfrb/arlington/latest/ArrayOf_2DashNumbers.tsv +3 -0
- data/data/pdfrb/arlington/latest/ArrayOf_2Integers.tsv +3 -0
- data/data/pdfrb/arlington/latest/ArrayOf_2LineEndingsNames.tsv +3 -0
- data/data/pdfrb/arlington/latest/ArrayOf_2NonNegativeIntegers.tsv +3 -0
- data/data/pdfrb/arlington/latest/ArrayOf_2Numbers.tsv +3 -0
- data/data/pdfrb/arlington/latest/ArrayOf_2StringsByte.tsv +3 -0
- data/data/pdfrb/arlington/latest/ArrayOf_2StringsText.tsv +3 -0
- data/data/pdfrb/arlington/latest/ArrayOf_3CenterOfRotationNumbers.tsv +4 -0
- data/data/pdfrb/arlington/latest/ArrayOf_3NonNegativeIntegers.tsv +4 -0
- data/data/pdfrb/arlington/latest/ArrayOf_3Numbers.tsv +4 -0
- data/data/pdfrb/arlington/latest/ArrayOf_3OrientationNumbers.tsv +4 -0
- data/data/pdfrb/arlington/latest/ArrayOf_3RGBNumbers.tsv +4 -0
- data/data/pdfrb/arlington/latest/ArrayOf_3or4CalloutLineNumbers.tsv +7 -0
- data/data/pdfrb/arlington/latest/ArrayOf_4AnnotBorderCharacteristics.tsv +5 -0
- data/data/pdfrb/arlington/latest/ArrayOf_4BorderColorArrays.tsv +5 -0
- data/data/pdfrb/arlington/latest/ArrayOf_4BorderStyleNames.tsv +5 -0
- data/data/pdfrb/arlington/latest/ArrayOf_4BorderThicknessNumbers.tsv +5 -0
- data/data/pdfrb/arlington/latest/ArrayOf_4ColourSpaceEntries.tsv +5 -0
- data/data/pdfrb/arlington/latest/ArrayOf_4Integers.tsv +5 -0
- data/data/pdfrb/arlington/latest/ArrayOf_4Numbers.tsv +5 -0
- data/data/pdfrb/arlington/latest/ArrayOf_4NumbersColorAnnotation.tsv +5 -0
- data/data/pdfrb/arlington/latest/ArrayOf_6Numbers.tsv +7 -0
- data/data/pdfrb/arlington/latest/ArrayOf_8Numbers.tsv +9 -0
- data/data/pdfrb/arlington/latest/ArrayOf_9Numbers.tsv +10 -0
- data/data/pdfrb/arlington/latest/ArrayOf_ArrayOfNumbers.tsv +2 -0
- data/data/pdfrb/arlington/latest/ArrayOf_RoleMapNS.tsv +3 -0
- data/data/pdfrb/arlington/latest/AuthCode.tsv +5 -0
- data/data/pdfrb/arlington/latest/Bead.tsv +7 -0
- data/data/pdfrb/arlington/latest/BeadFirst.tsv +7 -0
- data/data/pdfrb/arlington/latest/BlackpointArray.tsv +4 -0
- data/data/pdfrb/arlington/latest/BorderEffect.tsv +3 -0
- data/data/pdfrb/arlington/latest/BorderStyle.tsv +5 -0
- data/data/pdfrb/arlington/latest/BoxColorInfo.tsv +5 -0
- data/data/pdfrb/arlington/latest/BoxStyle.tsv +5 -0
- data/data/pdfrb/arlington/latest/CIDFontDescriptorMetrics.tsv +17 -0
- data/data/pdfrb/arlington/latest/CIDSystemInfo.tsv +4 -0
- data/data/pdfrb/arlington/latest/CIP4_Address.tsv +13 -0
- data/data/pdfrb/arlington/latest/CIP4_AssemblingIntent.tsv +7 -0
- data/data/pdfrb/arlington/latest/CIP4_AssemblyItem.tsv +3 -0
- data/data/pdfrb/arlington/latest/CIP4_BindIn.tsv +3 -0
- data/data/pdfrb/arlington/latest/CIP4_BindingIntent.tsv +6 -0
- data/data/pdfrb/arlington/latest/CIP4_BlowIn.tsv +3 -0
- data/data/pdfrb/arlington/latest/CIP4_ColorIntent.tsv +3 -0
- data/data/pdfrb/arlington/latest/CIP4_ComChannel.tsv +6 -0
- data/data/pdfrb/arlington/latest/CIP4_Company.tsv +5 -0
- data/data/pdfrb/arlington/latest/CIP4_Contact.tsv +8 -0
- data/data/pdfrb/arlington/latest/CIP4_FoldingIntent.tsv +4 -0
- data/data/pdfrb/arlington/latest/CIP4_HoleMakingIntent.tsv +3 -0
- data/data/pdfrb/arlington/latest/CIP4_HolePattern.tsv +4 -0
- data/data/pdfrb/arlington/latest/CIP4_Intent.tsv +11 -0
- data/data/pdfrb/arlington/latest/CIP4_IntentSummary.tsv +10 -0
- data/data/pdfrb/arlington/latest/CIP4_LayoutIntent.tsv +5 -0
- data/data/pdfrb/arlington/latest/CIP4_MediaIntent.tsv +11 -0
- data/data/pdfrb/arlington/latest/CIP4_Metadata.tsv +11 -0
- data/data/pdfrb/arlington/latest/CIP4_Person.tsv +10 -0
- data/data/pdfrb/arlington/latest/CIP4_Production.tsv +5 -0
- data/data/pdfrb/arlington/latest/CIP4_ProductionIntent.tsv +4 -0
- data/data/pdfrb/arlington/latest/CIP4_Recipient.tsv +3 -0
- data/data/pdfrb/arlington/latest/CIP4_Root.tsv +9 -0
- data/data/pdfrb/arlington/latest/CIP4_SaddleStitching.tsv +3 -0
- data/data/pdfrb/arlington/latest/CIP4_SideStitching.tsv +3 -0
- data/data/pdfrb/arlington/latest/CIP4_StickOn.tsv +3 -0
- data/data/pdfrb/arlington/latest/CMapStream.tsv +13 -0
- data/data/pdfrb/arlington/latest/CalGrayColorSpace.tsv +3 -0
- data/data/pdfrb/arlington/latest/CalGrayDict.tsv +4 -0
- data/data/pdfrb/arlington/latest/CalRGBColorSpace.tsv +3 -0
- data/data/pdfrb/arlington/latest/CalRGBDict.tsv +5 -0
- data/data/pdfrb/arlington/latest/Catalog.tsv +33 -0
- data/data/pdfrb/arlington/latest/CertSeedValue.tsv +14 -0
- data/data/pdfrb/arlington/latest/CharProcMap.tsv +2 -0
- data/data/pdfrb/arlington/latest/ClassMap.tsv +2 -0
- data/data/pdfrb/arlington/latest/Collection.tsv +11 -0
- data/data/pdfrb/arlington/latest/CollectionColors.tsv +7 -0
- data/data/pdfrb/arlington/latest/CollectionField.tsv +7 -0
- data/data/pdfrb/arlington/latest/CollectionFolder.tsv +13 -0
- data/data/pdfrb/arlington/latest/CollectionItem.tsv +3 -0
- data/data/pdfrb/arlington/latest/CollectionSchema.tsv +3 -0
- data/data/pdfrb/arlington/latest/CollectionSort.tsv +4 -0
- data/data/pdfrb/arlington/latest/CollectionSplit.tsv +4 -0
- data/data/pdfrb/arlington/latest/CollectionSubitem.tsv +4 -0
- data/data/pdfrb/arlington/latest/ColorSpaceMap.tsv +5 -0
- data/data/pdfrb/arlington/latest/ColorantsDict.tsv +2 -0
- data/data/pdfrb/arlington/latest/CryptFilter.tsv +5 -0
- data/data/pdfrb/arlington/latest/CryptFilterMap.tsv +4 -0
- data/data/pdfrb/arlington/latest/CryptFilterPublicKey.tsv +7 -0
- data/data/pdfrb/arlington/latest/CryptFilterPublicKeyMap.tsv +4 -0
- data/data/pdfrb/arlington/latest/DPM.tsv +5 -0
- data/data/pdfrb/arlington/latest/DPart.tsv +8 -0
- data/data/pdfrb/arlington/latest/DPartRoot.tsv +5 -0
- data/data/pdfrb/arlington/latest/DSS.tsv +6 -0
- data/data/pdfrb/arlington/latest/Data.tsv +4 -0
- data/data/pdfrb/arlington/latest/Dest0Array.tsv +3 -0
- data/data/pdfrb/arlington/latest/Dest0StructArray.tsv +3 -0
- data/data/pdfrb/arlington/latest/Dest1Array.tsv +4 -0
- data/data/pdfrb/arlington/latest/Dest1StructArray.tsv +4 -0
- data/data/pdfrb/arlington/latest/Dest4Array.tsv +7 -0
- data/data/pdfrb/arlington/latest/Dest4StructArray.tsv +7 -0
- data/data/pdfrb/arlington/latest/DestDict.tsv +3 -0
- data/data/pdfrb/arlington/latest/DestOutputProfileRef.tsv +7 -0
- data/data/pdfrb/arlington/latest/DestXYZArray.tsv +6 -0
- data/data/pdfrb/arlington/latest/DestXYZStructArray.tsv +6 -0
- data/data/pdfrb/arlington/latest/DestsMap.tsv +2 -0
- data/data/pdfrb/arlington/latest/DevExtensions.tsv +6 -0
- data/data/pdfrb/arlington/latest/DeviceCMYKColorSpace.tsv +2 -0
- data/data/pdfrb/arlington/latest/DeviceGrayColorSpace.tsv +2 -0
- data/data/pdfrb/arlington/latest/DeviceNColorSpace.tsv +6 -0
- data/data/pdfrb/arlington/latest/DeviceNDict.tsv +5 -0
- data/data/pdfrb/arlington/latest/DeviceNMixingHints.tsv +4 -0
- data/data/pdfrb/arlington/latest/DeviceNProcess.tsv +3 -0
- data/data/pdfrb/arlington/latest/DeviceRGBColorSpace.tsv +2 -0
- data/data/pdfrb/arlington/latest/DictionaryOfDictionaries.tsv +2 -0
- data/data/pdfrb/arlington/latest/DictionaryOfFunctions.tsv +3 -0
- data/data/pdfrb/arlington/latest/DocInfo.tsv +13 -0
- data/data/pdfrb/arlington/latest/DocMDPTransformParameters.tsv +4 -0
- data/data/pdfrb/arlington/latest/DocTimeStamp.tsv +19 -0
- data/data/pdfrb/arlington/latest/EmbeddedFileParameter.tsv +6 -0
- data/data/pdfrb/arlington/latest/EmbeddedFileStream.tsv +12 -0
- data/data/pdfrb/arlington/latest/Encoding.tsv +4 -0
- data/data/pdfrb/arlington/latest/EncryptedPayload.tsv +4 -0
- data/data/pdfrb/arlington/latest/EncryptionPublicKey.tsv +13 -0
- data/data/pdfrb/arlington/latest/EncryptionStandard.tsv +18 -0
- data/data/pdfrb/arlington/latest/ExData3DMarkup.tsv +6 -0
- data/data/pdfrb/arlington/latest/ExDataMarkupGeo.tsv +3 -0
- data/data/pdfrb/arlington/latest/ExDataProjection.tsv +4 -0
- data/data/pdfrb/arlington/latest/Extensions.tsv +5 -0
- data/data/pdfrb/arlington/latest/FDDict.tsv +2 -0
- data/data/pdfrb/arlington/latest/Field.tsv +8 -0
- data/data/pdfrb/arlington/latest/FieldBtnCheckbox.tsv +16 -0
- data/data/pdfrb/arlington/latest/FieldBtnPush.tsv +15 -0
- data/data/pdfrb/arlington/latest/FieldBtnRadio.tsv +16 -0
- data/data/pdfrb/arlington/latest/FieldChoice.tsv +18 -0
- data/data/pdfrb/arlington/latest/FieldMDPTransformParameters.tsv +5 -0
- data/data/pdfrb/arlington/latest/FieldSig.tsv +17 -0
- data/data/pdfrb/arlington/latest/FieldTx.tsv +16 -0
- data/data/pdfrb/arlington/latest/FileSpecEF.tsv +3 -0
- data/data/pdfrb/arlington/latest/FileSpecRF.tsv +3 -0
- data/data/pdfrb/arlington/latest/FileSpecification.tsv +17 -0
- data/data/pdfrb/arlington/latest/FileTrailer.tsv +11 -0
- data/data/pdfrb/arlington/latest/FilterCCITTFaxDecode.tsv +10 -0
- data/data/pdfrb/arlington/latest/FilterCrypt.tsv +3 -0
- data/data/pdfrb/arlington/latest/FilterDCTDecode.tsv +2 -0
- data/data/pdfrb/arlington/latest/FilterFlateDecode.tsv +5 -0
- data/data/pdfrb/arlington/latest/FilterJBIG2Decode.tsv +2 -0
- data/data/pdfrb/arlington/latest/FilterLZWDecode.tsv +6 -0
- data/data/pdfrb/arlington/latest/FixedPrint.tsv +5 -0
- data/data/pdfrb/arlington/latest/FloatingWindowParameters.tsv +10 -0
- data/data/pdfrb/arlington/latest/FontCIDType0.tsv +12 -0
- data/data/pdfrb/arlington/latest/FontCIDType2.tsv +12 -0
- data/data/pdfrb/arlington/latest/FontDescriptorCIDType0.tsv +25 -0
- data/data/pdfrb/arlington/latest/FontDescriptorCIDType2.tsv +26 -0
- data/data/pdfrb/arlington/latest/FontDescriptorTrueType.tsv +22 -0
- data/data/pdfrb/arlington/latest/FontDescriptorType1.tsv +22 -0
- data/data/pdfrb/arlington/latest/FontDescriptorType3.tsv +19 -0
- data/data/pdfrb/arlington/latest/FontFile.tsv +13 -0
- data/data/pdfrb/arlington/latest/FontFile2.tsv +13 -0
- data/data/pdfrb/arlington/latest/FontFile3CIDType0.tsv +13 -0
- data/data/pdfrb/arlington/latest/FontFile3OpenType.tsv +13 -0
- data/data/pdfrb/arlington/latest/FontFile3Type1.tsv +13 -0
- data/data/pdfrb/arlington/latest/FontFileType1.tsv +13 -0
- data/data/pdfrb/arlington/latest/FontMap.tsv +2 -0
- data/data/pdfrb/arlington/latest/FontMultipleMaster.tsv +11 -0
- data/data/pdfrb/arlington/latest/FontTrueType.tsv +11 -0
- data/data/pdfrb/arlington/latest/FontType0.tsv +7 -0
- data/data/pdfrb/arlington/latest/FontType1.tsv +11 -0
- data/data/pdfrb/arlington/latest/FontType3.tsv +14 -0
- data/data/pdfrb/arlington/latest/FunctionType0.tsv +16 -0
- data/data/pdfrb/arlington/latest/FunctionType2.tsv +7 -0
- data/data/pdfrb/arlington/latest/FunctionType3.tsv +7 -0
- data/data/pdfrb/arlington/latest/FunctionType4.tsv +11 -0
- data/data/pdfrb/arlington/latest/GTS_ProcStepsGroup.tsv +4 -0
- data/data/pdfrb/arlington/latest/GTSm_DevExtensions.tsv +6 -0
- data/data/pdfrb/arlington/latest/GammaArray.tsv +4 -0
- data/data/pdfrb/arlington/latest/GeographicCoordinateSystem.tsv +4 -0
- data/data/pdfrb/arlington/latest/GraphicsStateParameter.tsv +33 -0
- data/data/pdfrb/arlington/latest/GraphicsStateParameterMap.tsv +2 -0
- data/data/pdfrb/arlington/latest/GroupAttributes.tsv +6 -0
- data/data/pdfrb/arlington/latest/HalftoneType1.tsv +9 -0
- data/data/pdfrb/arlington/latest/HalftoneType10.tsv +14 -0
- data/data/pdfrb/arlington/latest/HalftoneType16.tsv +16 -0
- data/data/pdfrb/arlington/latest/HalftoneType5.tsv +6 -0
- data/data/pdfrb/arlington/latest/HalftoneType6.tsv +14 -0
- data/data/pdfrb/arlington/latest/ICCBasedColorSpace.tsv +3 -0
- data/data/pdfrb/arlington/latest/ICCProfileStream.tsv +12 -0
- data/data/pdfrb/arlington/latest/ISO_DevExtensions.tsv +6 -0
- data/data/pdfrb/arlington/latest/IconFit.tsv +5 -0
- data/data/pdfrb/arlington/latest/IndexedColorSpace.tsv +5 -0
- data/data/pdfrb/arlington/latest/InteractiveForm.tsv +9 -0
- data/data/pdfrb/arlington/latest/LabColorSpace.tsv +3 -0
- data/data/pdfrb/arlington/latest/LabDict.tsv +4 -0
- data/data/pdfrb/arlington/latest/LabRangeArray.tsv +5 -0
- data/data/pdfrb/arlington/latest/LegalAttestation.tsv +23 -0
- data/data/pdfrb/arlington/latest/LinearizationParameterDict.tsv +9 -0
- data/data/pdfrb/arlington/latest/MDPDict.tsv +2 -0
- data/data/pdfrb/arlington/latest/Mac.tsv +4 -0
- data/data/pdfrb/arlington/latest/MarkInfo.tsv +4 -0
- data/data/pdfrb/arlington/latest/MarkedContentReference.tsv +6 -0
- data/data/pdfrb/arlington/latest/MeasureGEO.tsv +10 -0
- data/data/pdfrb/arlington/latest/MeasureRL.tsv +12 -0
- data/data/pdfrb/arlington/latest/MediaClipData.tsv +11 -0
- data/data/pdfrb/arlington/latest/MediaClipDataMHBE.tsv +2 -0
- data/data/pdfrb/arlington/latest/MediaClipSection.tsv +8 -0
- data/data/pdfrb/arlington/latest/MediaClipSectionMHBE.tsv +3 -0
- data/data/pdfrb/arlington/latest/MediaCriteria.tsv +12 -0
- data/data/pdfrb/arlington/latest/MediaDuration.tsv +4 -0
- data/data/pdfrb/arlington/latest/MediaOffsetFrame.tsv +4 -0
- data/data/pdfrb/arlington/latest/MediaOffsetMarker.tsv +4 -0
- data/data/pdfrb/arlington/latest/MediaOffsetTime.tsv +4 -0
- data/data/pdfrb/arlington/latest/MediaPermissions.tsv +3 -0
- data/data/pdfrb/arlington/latest/MediaPlayParameters.tsv +5 -0
- data/data/pdfrb/arlington/latest/MediaPlayParametersBE.tsv +7 -0
- data/data/pdfrb/arlington/latest/MediaPlayParametersMH.tsv +7 -0
- data/data/pdfrb/arlington/latest/MediaPlayerInfo.tsv +5 -0
- data/data/pdfrb/arlington/latest/MediaPlayers.tsv +5 -0
- data/data/pdfrb/arlington/latest/MediaScreenParameters.tsv +4 -0
- data/data/pdfrb/arlington/latest/MediaScreenParametersMHBE.tsv +6 -0
- data/data/pdfrb/arlington/latest/Metadata.tsv +10 -0
- data/data/pdfrb/arlington/latest/MicrosoftWindowsLaunchParam.tsv +5 -0
- data/data/pdfrb/arlington/latest/MinimumBitDepth.tsv +4 -0
- data/data/pdfrb/arlington/latest/MinimumScreenSize.tsv +4 -0
- data/data/pdfrb/arlington/latest/Movie.tsv +5 -0
- data/data/pdfrb/arlington/latest/MovieActivation.tsv +10 -0
- data/data/pdfrb/arlington/latest/Name.tsv +12 -0
- data/data/pdfrb/arlington/latest/Namespace.tsv +5 -0
- data/data/pdfrb/arlington/latest/NavNode.tsv +7 -0
- data/data/pdfrb/arlington/latest/Navigator.tsv +16 -0
- data/data/pdfrb/arlington/latest/NumberFormat.tsv +12 -0
- data/data/pdfrb/arlington/latest/OOAdditionalStmsArray.tsv +3 -0
- data/data/pdfrb/arlington/latest/OPIVersion13.tsv +2 -0
- data/data/pdfrb/arlington/latest/OPIVersion13Dict.tsv +19 -0
- data/data/pdfrb/arlington/latest/OPIVersion20.tsv +2 -0
- data/data/pdfrb/arlington/latest/OPIVersion20Dict.tsv +12 -0
- data/data/pdfrb/arlington/latest/ObjectReference.tsv +4 -0
- data/data/pdfrb/arlington/latest/ObjectStream.tsv +12 -0
- data/data/pdfrb/arlington/latest/OptContentConfig.tsv +12 -0
- data/data/pdfrb/arlington/latest/OptContentCreatorInfo.tsv +4 -0
- data/data/pdfrb/arlington/latest/OptContentExport.tsv +2 -0
- data/data/pdfrb/arlington/latest/OptContentGroup.tsv +6 -0
- data/data/pdfrb/arlington/latest/OptContentLanguage.tsv +3 -0
- data/data/pdfrb/arlington/latest/OptContentMembership.tsv +5 -0
- data/data/pdfrb/arlington/latest/OptContentPageElement.tsv +2 -0
- data/data/pdfrb/arlington/latest/OptContentPrint.tsv +3 -0
- data/data/pdfrb/arlington/latest/OptContentProperties.tsv +4 -0
- data/data/pdfrb/arlington/latest/OptContentUsage.tsv +9 -0
- data/data/pdfrb/arlington/latest/OptContentUsageApplication.tsv +4 -0
- data/data/pdfrb/arlington/latest/OptContentUser.tsv +3 -0
- data/data/pdfrb/arlington/latest/OptContentView.tsv +2 -0
- data/data/pdfrb/arlington/latest/OptContentZoom.tsv +3 -0
- data/data/pdfrb/arlington/latest/Outline.tsv +5 -0
- data/data/pdfrb/arlington/latest/OutlineItem.tsv +13 -0
- data/data/pdfrb/arlington/latest/OutputIntents.tsv +11 -0
- data/data/pdfrb/arlington/latest/PageLabel.tsv +5 -0
- data/data/pdfrb/arlington/latest/PageObject.tsv +35 -0
- data/data/pdfrb/arlington/latest/PagePiece.tsv +2 -0
- data/data/pdfrb/arlington/latest/PageTreeNode.tsv +9 -0
- data/data/pdfrb/arlington/latest/PageTreeNodeRoot.tsv +8 -0
- data/data/pdfrb/arlington/latest/PaperMetaData.tsv +13 -0
- data/data/pdfrb/arlington/latest/PatternColorSpace.tsv +3 -0
- data/data/pdfrb/arlington/latest/PatternMap.tsv +2 -0
- data/data/pdfrb/arlington/latest/PatternType1.tsv +18 -0
- data/data/pdfrb/arlington/latest/PatternType2.tsv +6 -0
- data/data/pdfrb/arlington/latest/Permissions.tsv +3 -0
- data/data/pdfrb/arlington/latest/PointData.tsv +5 -0
- data/data/pdfrb/arlington/latest/ProjectedCoordinateSystem.tsv +4 -0
- data/data/pdfrb/arlington/latest/Projection.tsv +9 -0
- data/data/pdfrb/arlington/latest/Reference.tsv +4 -0
- data/data/pdfrb/arlington/latest/RelatedFilesArray.tsv +3 -0
- data/data/pdfrb/arlington/latest/RenditionBE.tsv +2 -0
- data/data/pdfrb/arlington/latest/RenditionMH.tsv +2 -0
- data/data/pdfrb/arlington/latest/RenditionMedia.tsv +9 -0
- data/data/pdfrb/arlington/latest/RenditionSelector.tsv +7 -0
- data/data/pdfrb/arlington/latest/Requirements3DMarkup.tsv +6 -0
- data/data/pdfrb/arlington/latest/RequirementsAcroFormInteract.tsv +6 -0
- data/data/pdfrb/arlington/latest/RequirementsAction.tsv +6 -0
- data/data/pdfrb/arlington/latest/RequirementsAttachment.tsv +6 -0
- data/data/pdfrb/arlington/latest/RequirementsAttachmentEditing.tsv +6 -0
- data/data/pdfrb/arlington/latest/RequirementsCollection.tsv +6 -0
- data/data/pdfrb/arlington/latest/RequirementsCollectionEditing.tsv +6 -0
- data/data/pdfrb/arlington/latest/RequirementsDPartInteract.tsv +6 -0
- data/data/pdfrb/arlington/latest/RequirementsDigSig.tsv +7 -0
- data/data/pdfrb/arlington/latest/RequirementsDigSigMDP.tsv +7 -0
- data/data/pdfrb/arlington/latest/RequirementsDigSigValidation.tsv +7 -0
- data/data/pdfrb/arlington/latest/RequirementsEnableJavaScripts.tsv +6 -0
- data/data/pdfrb/arlington/latest/RequirementsEncryption.tsv +7 -0
- data/data/pdfrb/arlington/latest/RequirementsGeospatial2D.tsv +6 -0
- data/data/pdfrb/arlington/latest/RequirementsGeospatial3D.tsv +6 -0
- data/data/pdfrb/arlington/latest/RequirementsHandler.tsv +4 -0
- data/data/pdfrb/arlington/latest/RequirementsMarkup.tsv +6 -0
- data/data/pdfrb/arlington/latest/RequirementsMultimedia.tsv +6 -0
- data/data/pdfrb/arlington/latest/RequirementsNavigation.tsv +6 -0
- data/data/pdfrb/arlington/latest/RequirementsOCAutoStates.tsv +6 -0
- data/data/pdfrb/arlington/latest/RequirementsOCInteract.tsv +6 -0
- data/data/pdfrb/arlington/latest/RequirementsPRC.tsv +6 -0
- data/data/pdfrb/arlington/latest/RequirementsRichMedia.tsv +6 -0
- data/data/pdfrb/arlington/latest/RequirementsSTEP.tsv +6 -0
- data/data/pdfrb/arlington/latest/RequirementsSeparationSimulation.tsv +6 -0
- data/data/pdfrb/arlington/latest/RequirementsTransitions.tsv +6 -0
- data/data/pdfrb/arlington/latest/RequirementsU3D.tsv +6 -0
- data/data/pdfrb/arlington/latest/RequirementsglTF.tsv +6 -0
- data/data/pdfrb/arlington/latest/Resource.tsv +10 -0
- data/data/pdfrb/arlington/latest/RichMediaActivation.tsv +8 -0
- data/data/pdfrb/arlington/latest/RichMediaAnimation.tsv +6 -0
- data/data/pdfrb/arlington/latest/RichMediaCommand.tsv +4 -0
- data/data/pdfrb/arlington/latest/RichMediaCommandArray.tsv +2 -0
- data/data/pdfrb/arlington/latest/RichMediaConfiguration.tsv +5 -0
- data/data/pdfrb/arlington/latest/RichMediaContent.tsv +5 -0
- data/data/pdfrb/arlington/latest/RichMediaCuePoint.tsv +6 -0
- data/data/pdfrb/arlington/latest/RichMediaDeactivation.tsv +3 -0
- data/data/pdfrb/arlington/latest/RichMediaHeight.tsv +4 -0
- data/data/pdfrb/arlington/latest/RichMediaInstance.tsv +6 -0
- data/data/pdfrb/arlington/latest/RichMediaParams.tsv +7 -0
- data/data/pdfrb/arlington/latest/RichMediaPosition.tsv +6 -0
- data/data/pdfrb/arlington/latest/RichMediaPresentation.tsv +8 -0
- data/data/pdfrb/arlington/latest/RichMediaSettings.tsv +4 -0
- data/data/pdfrb/arlington/latest/RichMediaWidth.tsv +4 -0
- data/data/pdfrb/arlington/latest/RichMediaWindow.tsv +5 -0
- data/data/pdfrb/arlington/latest/RoleMap.tsv +2 -0
- data/data/pdfrb/arlington/latest/RoleMapNS.tsv +2 -0
- data/data/pdfrb/arlington/latest/Separation.tsv +4 -0
- data/data/pdfrb/arlington/latest/SeparationColorSpace.tsv +5 -0
- data/data/pdfrb/arlington/latest/ShadingMap.tsv +2 -0
- data/data/pdfrb/arlington/latest/ShadingType1.tsv +9 -0
- data/data/pdfrb/arlington/latest/ShadingType2.tsv +10 -0
- data/data/pdfrb/arlington/latest/ShadingType3.tsv +10 -0
- data/data/pdfrb/arlington/latest/ShadingType4.tsv +18 -0
- data/data/pdfrb/arlington/latest/ShadingType5.tsv +18 -0
- data/data/pdfrb/arlington/latest/ShadingType6.tsv +18 -0
- data/data/pdfrb/arlington/latest/ShadingType7.tsv +18 -0
- data/data/pdfrb/arlington/latest/SigFieldLock.tsv +5 -0
- data/data/pdfrb/arlington/latest/SigFieldSeedValue.tsv +15 -0
- data/data/pdfrb/arlington/latest/Signature.tsv +20 -0
- data/data/pdfrb/arlington/latest/SignatureBuildDataAppDict.tsv +10 -0
- data/data/pdfrb/arlington/latest/SignatureBuildDataDict.tsv +9 -0
- data/data/pdfrb/arlington/latest/SignatureBuildDataSigQDict.tsv +10 -0
- data/data/pdfrb/arlington/latest/SignatureBuildPropDict.tsv +5 -0
- data/data/pdfrb/arlington/latest/SignatureReferenceDocMDP.tsv +8 -0
- data/data/pdfrb/arlington/latest/SignatureReferenceFieldMDP.tsv +8 -0
- data/data/pdfrb/arlington/latest/SignatureReferenceIdentity.tsv +7 -0
- data/data/pdfrb/arlington/latest/SignatureReferenceUR.tsv +8 -0
- data/data/pdfrb/arlington/latest/SlideShow.tsv +5 -0
- data/data/pdfrb/arlington/latest/SoftMaskAlpha.tsv +6 -0
- data/data/pdfrb/arlington/latest/SoftMaskLuminosity.tsv +6 -0
- data/data/pdfrb/arlington/latest/SoftwareIdentifier.tsv +8 -0
- data/data/pdfrb/arlington/latest/Solidities.tsv +3 -0
- data/data/pdfrb/arlington/latest/SoundObject.tsv +15 -0
- data/data/pdfrb/arlington/latest/SourceInformation.tsv +6 -0
- data/data/pdfrb/arlington/latest/SpectralData.tsv +2 -0
- data/data/pdfrb/arlington/latest/Stream.tsv +8 -0
- data/data/pdfrb/arlington/latest/StructElem.tsv +20 -0
- data/data/pdfrb/arlington/latest/StructTreeRoot.tsv +11 -0
- data/data/pdfrb/arlington/latest/StructureAttributesDict.tsv +54 -0
- data/data/pdfrb/arlington/latest/StyleDict.tsv +2 -0
- data/data/pdfrb/arlington/latest/SubjectDN.tsv +2 -0
- data/data/pdfrb/arlington/latest/Target.tsv +6 -0
- data/data/pdfrb/arlington/latest/TargetEmbedded.tsv +6 -0
- data/data/pdfrb/arlington/latest/Thread.tsv +5 -0
- data/data/pdfrb/arlington/latest/Thumbnail.tsv +15 -0
- data/data/pdfrb/arlington/latest/TimeStampDict.tsv +3 -0
- data/data/pdfrb/arlington/latest/Timespan.tsv +4 -0
- data/data/pdfrb/arlington/latest/ToUnicodeCMapStream.tsv +13 -0
- data/data/pdfrb/arlington/latest/TrailerIDArray.tsv +3 -0
- data/data/pdfrb/arlington/latest/Transition.tsv +9 -0
- data/data/pdfrb/arlington/latest/TrapRegion.tsv +3 -0
- data/data/pdfrb/arlington/latest/URI.tsv +2 -0
- data/data/pdfrb/arlington/latest/URLAlias.tsv +3 -0
- data/data/pdfrb/arlington/latest/URTransformParamAnnotsArray.tsv +2 -0
- data/data/pdfrb/arlington/latest/URTransformParamDocumentArray.tsv +2 -0
- data/data/pdfrb/arlington/latest/URTransformParamEFArray.tsv +2 -0
- data/data/pdfrb/arlington/latest/URTransformParamFormArray.tsv +2 -0
- data/data/pdfrb/arlington/latest/URTransformParamSignatureArray.tsv +2 -0
- data/data/pdfrb/arlington/latest/URTransformParameters.tsv +10 -0
- data/data/pdfrb/arlington/latest/UserProperty.tsv +5 -0
- data/data/pdfrb/arlington/latest/VRI.tsv +7 -0
- data/data/pdfrb/arlington/latest/VRIMap.tsv +2 -0
- data/data/pdfrb/arlington/latest/ViewParams.tsv +3 -0
- data/data/pdfrb/arlington/latest/ViewerPreferences.tsv +19 -0
- data/data/pdfrb/arlington/latest/Viewport.tsv +6 -0
- data/data/pdfrb/arlington/latest/VisibilityExpressionArray.tsv +4 -0
- data/data/pdfrb/arlington/latest/WebCaptureCommand.tsv +8 -0
- data/data/pdfrb/arlington/latest/WebCaptureCommandSettings.tsv +3 -0
- data/data/pdfrb/arlington/latest/WebCaptureImageSet.tsv +9 -0
- data/data/pdfrb/arlington/latest/WebCaptureInfo.tsv +3 -0
- data/data/pdfrb/arlington/latest/WebCapturePageSet.tsv +10 -0
- data/data/pdfrb/arlington/latest/WhitepointArray.tsv +4 -0
- data/data/pdfrb/arlington/latest/XObjectFormPS.tsv +10 -0
- data/data/pdfrb/arlington/latest/XObjectFormPSpassthrough.tsv +15 -0
- data/data/pdfrb/arlington/latest/XObjectFormPrinterMark.tsv +29 -0
- data/data/pdfrb/arlington/latest/XObjectFormTrapNet.tsv +31 -0
- data/data/pdfrb/arlington/latest/XObjectFormType1.tsv +32 -0
- data/data/pdfrb/arlington/latest/XObjectImage.tsv +35 -0
- data/data/pdfrb/arlington/latest/XObjectImageMask.tsv +29 -0
- data/data/pdfrb/arlington/latest/XObjectImageSoftMask.tsv +22 -0
- data/data/pdfrb/arlington/latest/XObjectMap.tsv +2 -0
- data/data/pdfrb/arlington/latest/XRefStream.tsv +20 -0
- data/data/pdfrb/arlington/latest/_UniversalArray.tsv +2 -0
- data/data/pdfrb/arlington/latest/_UniversalDictionary.tsv +2 -0
- data/data/pdfrb/glyphlist.txt +4306 -0
- data/data/pdfrb/zapfdingbats.txt +226 -0
- data/exe/pdfrb +10 -0
- data/lib/pdfrb/arlington/field_definition.rb +128 -0
- data/lib/pdfrb/arlington/loader.rb +84 -0
- data/lib/pdfrb/arlington/object_definition.rb +45 -0
- data/lib/pdfrb/arlington/pdf_version.rb +121 -0
- data/lib/pdfrb/arlington/predicate/ast.rb +21 -0
- data/lib/pdfrb/arlington/predicate/context.rb +24 -0
- data/lib/pdfrb/arlington/predicate/evaluator.rb +113 -0
- data/lib/pdfrb/arlington/predicate/functions/arithmetic.rb +67 -0
- data/lib/pdfrb/arlington/predicate/functions/file.rb +22 -0
- data/lib/pdfrb/arlington/predicate/functions/logical.rb +38 -0
- data/lib/pdfrb/arlington/predicate/functions/presence.rb +39 -0
- data/lib/pdfrb/arlington/predicate/functions/reference.rb +28 -0
- data/lib/pdfrb/arlington/predicate/functions/version.rb +53 -0
- data/lib/pdfrb/arlington/predicate/functions.rb +34 -0
- data/lib/pdfrb/arlington/predicate/lexer.rb +177 -0
- data/lib/pdfrb/arlington/predicate/parser.rb +185 -0
- data/lib/pdfrb/arlington/predicate.rb +22 -0
- data/lib/pdfrb/arlington/type.rb +41 -0
- data/lib/pdfrb/arlington.rb +19 -0
- data/lib/pdfrb/cli.rb +135 -0
- data/lib/pdfrb/configuration.rb +64 -0
- data/lib/pdfrb/conformance/pdf_a.rb +74 -0
- data/lib/pdfrb/conformance/pdf_ua.rb +46 -0
- data/lib/pdfrb/conformance.rb +11 -0
- data/lib/pdfrb/content/canvas.rb +248 -0
- data/lib/pdfrb/content/graphic_object/arc.rb +85 -0
- data/lib/pdfrb/content/graphic_object/curve.rb +28 -0
- data/lib/pdfrb/content/graphic_object/polyline.rb +27 -0
- data/lib/pdfrb/content/graphic_object/rectangle.rb +53 -0
- data/lib/pdfrb/content/graphic_object.rb +16 -0
- data/lib/pdfrb/content/graphics_state.rb +104 -0
- data/lib/pdfrb/content/operator.rb +72 -0
- data/lib/pdfrb/content/operators/color.rb +106 -0
- data/lib/pdfrb/content/operators/general.rb +50 -0
- data/lib/pdfrb/content/operators/graphics_state_params.rb +78 -0
- data/lib/pdfrb/content/operators/marked_content.rb +51 -0
- data/lib/pdfrb/content/operators/painting.rb +82 -0
- data/lib/pdfrb/content/operators/path.rb +69 -0
- data/lib/pdfrb/content/operators/text_positioning.rb +44 -0
- data/lib/pdfrb/content/operators/text_showing.rb +48 -0
- data/lib/pdfrb/content/operators/text_state.rb +66 -0
- data/lib/pdfrb/content/parser.rb +103 -0
- data/lib/pdfrb/content/processor.rb +81 -0
- data/lib/pdfrb/content.rb +38 -0
- data/lib/pdfrb/data_dir.rb +35 -0
- data/lib/pdfrb/digital_signature/handler.rb +21 -0
- data/lib/pdfrb/digital_signature/signing.rb +29 -0
- data/lib/pdfrb/digital_signature/verification.rb +22 -0
- data/lib/pdfrb/digital_signature.rb +11 -0
- data/lib/pdfrb/document/annotations.rb +44 -0
- data/lib/pdfrb/document/destinations.rb +22 -0
- data/lib/pdfrb/document/files.rb +28 -0
- data/lib/pdfrb/document/fonts.rb +121 -0
- data/lib/pdfrb/document/images.rb +57 -0
- data/lib/pdfrb/document/metadata.rb +64 -0
- data/lib/pdfrb/document/pages.rb +134 -0
- data/lib/pdfrb/document.rb +343 -0
- data/lib/pdfrb/encryption/aes.rb +68 -0
- data/lib/pdfrb/encryption/password_verification.rb +112 -0
- data/lib/pdfrb/encryption/rc4.rb +45 -0
- data/lib/pdfrb/encryption/security_handler.rb +65 -0
- data/lib/pdfrb/encryption/standard_security_handler.rb +117 -0
- data/lib/pdfrb/encryption.rb +20 -0
- data/lib/pdfrb/error.rb +92 -0
- data/lib/pdfrb/filter/ascii_85_decode.rb +79 -0
- data/lib/pdfrb/filter/ascii_hex_decode.rb +37 -0
- data/lib/pdfrb/filter/base.rb +32 -0
- data/lib/pdfrb/filter/crypt.rb +36 -0
- data/lib/pdfrb/filter/flate_decode.rb +137 -0
- data/lib/pdfrb/filter/lzw_decode.rb +124 -0
- data/lib/pdfrb/filter/passthrough_filters.rb +55 -0
- data/lib/pdfrb/filter/run_length_decode.rb +72 -0
- data/lib/pdfrb/filter.rb +64 -0
- data/lib/pdfrb/font/afm_parser.rb +84 -0
- data/lib/pdfrb/font/cmap/parser.rb +96 -0
- data/lib/pdfrb/font/cmap/writer.rb +46 -0
- data/lib/pdfrb/font/cmap.rb +10 -0
- data/lib/pdfrb/font/encoding/mac_roman_encoding.rb +25 -0
- data/lib/pdfrb/font/encoding/pdf_doc_encoding.rb +16 -0
- data/lib/pdfrb/font/encoding/standard_encoding.rb +24 -0
- data/lib/pdfrb/font/encoding/win_ansi_encoding.rb +25 -0
- data/lib/pdfrb/font/encoding/zapf_dingbats_encoding.rb +13 -0
- data/lib/pdfrb/font/encoding.rb +36 -0
- data/lib/pdfrb/font/glyph_list.rb +56 -0
- data/lib/pdfrb/font/true_type/cmap.rb +240 -0
- data/lib/pdfrb/font/true_type/file.rb +85 -0
- data/lib/pdfrb/font/true_type/head.rb +43 -0
- data/lib/pdfrb/font/true_type/hhea.rb +36 -0
- data/lib/pdfrb/font/true_type/hmtx.rb +58 -0
- data/lib/pdfrb/font/true_type/os2.rb +51 -0
- data/lib/pdfrb/font/true_type/subsetter.rb +28 -0
- data/lib/pdfrb/font/true_type.rb +14 -0
- data/lib/pdfrb/font/type1/font_metrics.rb +46 -0
- data/lib/pdfrb/font/type1.rb +9 -0
- data/lib/pdfrb/font.rb +18 -0
- data/lib/pdfrb/font_loader/true_type.rb +62 -0
- data/lib/pdfrb/font_loader/type1.rb +27 -0
- data/lib/pdfrb/font_loader.rb +10 -0
- data/lib/pdfrb/image_loader/jpeg.rb +90 -0
- data/lib/pdfrb/image_loader/pdf.rb +28 -0
- data/lib/pdfrb/image_loader/png.rb +282 -0
- data/lib/pdfrb/image_loader.rb +64 -0
- data/lib/pdfrb/importer.rb +78 -0
- data/lib/pdfrb/model/cos/dictionary.rb +310 -0
- data/lib/pdfrb/model/cos/fields.rb +215 -0
- data/lib/pdfrb/model/cos/name_encoding.rb +64 -0
- data/lib/pdfrb/model/cos/stream.rb +96 -0
- data/lib/pdfrb/model/cos/string_encoding.rb +135 -0
- data/lib/pdfrb/model/cos.rb +20 -0
- data/lib/pdfrb/model/date.rb +82 -0
- data/lib/pdfrb/model/matrix.rb +85 -0
- data/lib/pdfrb/model/object.rb +76 -0
- data/lib/pdfrb/model/pdf_array.rb +63 -0
- data/lib/pdfrb/model/rectangle.rb +54 -0
- data/lib/pdfrb/model/reference.rb +49 -0
- data/lib/pdfrb/model/type/action.rb +33 -0
- data/lib/pdfrb/model/type/af_embedded_file.rb +12 -0
- data/lib/pdfrb/model/type/af_file_specification.rb +13 -0
- data/lib/pdfrb/model/type/annotation.rb +50 -0
- data/lib/pdfrb/model/type/catalog.rb +50 -0
- data/lib/pdfrb/model/type/cid_font.rb +13 -0
- data/lib/pdfrb/model/type/embedded_file.rb +13 -0
- data/lib/pdfrb/model/type/encryption_public_key.rb +12 -0
- data/lib/pdfrb/model/type/encryption_standard.rb +12 -0
- data/lib/pdfrb/model/type/file_specification.rb +12 -0
- data/lib/pdfrb/model/type/file_trailer.rb +14 -0
- data/lib/pdfrb/model/type/font.rb +13 -0
- data/lib/pdfrb/model/type/font_descriptor.rb +12 -0
- data/lib/pdfrb/model/type/font_true_type.rb +12 -0
- data/lib/pdfrb/model/type/font_type0.rb +12 -0
- data/lib/pdfrb/model/type/font_type1.rb +12 -0
- data/lib/pdfrb/model/type/font_type3.rb +13 -0
- data/lib/pdfrb/model/type/graphics_state_parameter.rb +17 -0
- data/lib/pdfrb/model/type/info.rb +15 -0
- data/lib/pdfrb/model/type/interactive_form.rb +12 -0
- data/lib/pdfrb/model/type/metadata.rb +18 -0
- data/lib/pdfrb/model/type/names.rb +14 -0
- data/lib/pdfrb/model/type/object_stream.rb +14 -0
- data/lib/pdfrb/model/type/optional_content_group.rb +25 -0
- data/lib/pdfrb/model/type/optional_content_membership.rb +13 -0
- data/lib/pdfrb/model/type/optional_content_properties.rb +12 -0
- data/lib/pdfrb/model/type/outline.rb +20 -0
- data/lib/pdfrb/model/type/outline_item.rb +13 -0
- data/lib/pdfrb/model/type/output_intent.rb +12 -0
- data/lib/pdfrb/model/type/page.rb +86 -0
- data/lib/pdfrb/model/type/page_tree_node.rb +46 -0
- data/lib/pdfrb/model/type/resources.rb +53 -0
- data/lib/pdfrb/model/type/struct_elem.rb +15 -0
- data/lib/pdfrb/model/type/struct_tree_root.rb +15 -0
- data/lib/pdfrb/model/type/xobject_form.rb +13 -0
- data/lib/pdfrb/model/type/xobject_image.rb +13 -0
- data/lib/pdfrb/model/type/xref_stream.rb +14 -0
- data/lib/pdfrb/model/type.rb +78 -0
- data/lib/pdfrb/model.rb +27 -0
- data/lib/pdfrb/pdf_constants.rb +42 -0
- data/lib/pdfrb/serializer.rb +174 -0
- data/lib/pdfrb/source/header_reader.rb +34 -0
- data/lib/pdfrb/source/helpers.rb +25 -0
- data/lib/pdfrb/source/linearization_detection.rb +34 -0
- data/lib/pdfrb/source/object_reader.rb +132 -0
- data/lib/pdfrb/source/object_stream_reader.rb +32 -0
- data/lib/pdfrb/source/parser.rb +281 -0
- data/lib/pdfrb/source/recovery.rb +35 -0
- data/lib/pdfrb/source/token.rb +15 -0
- data/lib/pdfrb/source/tokenizer.rb +320 -0
- data/lib/pdfrb/source/tokenizer.rb.bak +320 -0
- data/lib/pdfrb/source/trailer_reader.rb +32 -0
- data/lib/pdfrb/source/xref_stream_reader.rb +52 -0
- data/lib/pdfrb/source/xref_table_reader.rb +72 -0
- data/lib/pdfrb/source.rb +24 -0
- data/lib/pdfrb/task/extract_images.rb +53 -0
- data/lib/pdfrb/task/extract_text.rb +232 -0
- data/lib/pdfrb/task/merge.rb +47 -0
- data/lib/pdfrb/task/optimize.rb +18 -0
- data/lib/pdfrb/task.rb +13 -0
- data/lib/pdfrb/version.rb +5 -0
- data/lib/pdfrb/writer.rb +144 -0
- data/lib/pdfrb/xref_section.rb +51 -0
- data/lib/pdfrb.rb +97 -0
- metadata +890 -0
data/.yardopts
ADDED
data/CHANGELOG.md
ADDED
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to the pdfrb gem will be documented in this file.
|
|
4
|
+
|
|
5
|
+
## [Unreleased]
|
|
6
|
+
|
|
7
|
+
### Added — 2026-08-01 (layout engine session)
|
|
8
|
+
|
|
9
|
+
**Full layout engine + XSL-FO pipeline (TODO.layout 01–17).**
|
|
10
|
+
|
|
11
|
+
* `Pdfrb::Layout::FontMetrics` (AfmMetrics + TrueTypeMetrics) +
|
|
12
|
+
`GlyphMeasurer` — real glyph widths for the 14 standard Type1 fonts
|
|
13
|
+
(via Adobe AFM, now vendored) and any TTF/OTF (via head/hhea/hmtx/
|
|
14
|
+
cmap/OS-2 table parsers). Replaces the 0.5×font_size estimate; matches
|
|
15
|
+
Adobe metrics to 0.01pt.
|
|
16
|
+
* `Pdfrb::Layout::TextLayout` — Greedy and Knuth-Plass line breaking
|
|
17
|
+
with real glyph metrics, alignment (left/right/center/justify),
|
|
18
|
+
hyphenation hooks, and break-opportunity finder that handles
|
|
19
|
+
multi-run paragraphs (bold spans, hyperlinks).
|
|
20
|
+
* `Pdfrb::Layout::PageFlow` + `Flowable` + `Frame` — flowing-text
|
|
21
|
+
engine with split-on-page-break for paragraphs/tables, keep-together,
|
|
22
|
+
page-break-before/after, and a two-pass static-content render for
|
|
23
|
+
`fo:page-number` and `fo:page-number-citation`.
|
|
24
|
+
* `Pdfrb::Layout::Table` + `TableLayout::Fixed` + `TableLayout::Auto`
|
|
25
|
+
+ `TableFlowable` + `TableRenderer` — fixed-width and CSS 2.1
|
|
26
|
+
auto-width column layout, row/col spans, header row repeat across
|
|
27
|
+
page breaks.
|
|
28
|
+
* `Pdfrb::Layout::PageTemplate` + `Region` + `PageSequenceMaster` +
|
|
29
|
+
`StaticContent` — page geometry with 5 regions (body/before/after/
|
|
30
|
+
start/end) and odd/even/first/last/blank page-template selection.
|
|
31
|
+
* `Pdfrb::Layout::Leader` + `FieldRun`s (PageNumberField,
|
|
32
|
+
PageNumberCitationField, PageCountField) — TOC leaders and
|
|
33
|
+
page-number fields, resolved via the two-pass layout.
|
|
34
|
+
* `Pdfrb::Layout::SVG::*` — SVG → PDF renderer supporting path data,
|
|
35
|
+
rect/circle/ellipse/line/polyline/polygon, text, image (with
|
|
36
|
+
data: URI), nested groups with transforms, and presentational
|
|
37
|
+
styling. New SVG element = one Element subclass.
|
|
38
|
+
* `Pdfrb::Layout::FO::*` — XSL-FO parser (REXML-based) + PropertyResolver
|
|
39
|
+
(inheritance + shorthand expansion) + MasterBuilder + FlowBuilder +
|
|
40
|
+
Compiler. End-to-end: `Pdfrb.render_fo(xml, io:)` produces a PDF.
|
|
41
|
+
* `Pdfrb.parse_fo(xml)` and `Pdfrb.render_fo(xml, path_or_io:)` top-level
|
|
42
|
+
entry points.
|
|
43
|
+
|
|
44
|
+
### Fixed — 2026-08-01 (layout engine session)
|
|
45
|
+
|
|
46
|
+
* `Pdfrb::Font::AFMParser` — handle `StartCharMetrics 315` (with count),
|
|
47
|
+
not just bare `StartCharMetrics`.
|
|
48
|
+
* `Pdfrb::Font::GlyphList` — accept both canonical hex format and
|
|
49
|
+
literal-Unicode repackagings of glyphlist.txt.
|
|
50
|
+
* `Pdfrb::Filter::FlateDecode` — `out << unfiltered.pack("C*")` so PNG
|
|
51
|
+
predictor output is concatenated correctly (was appending Array to
|
|
52
|
+
String).
|
|
53
|
+
* `Pdfrb::Model::Cos::Stream#decoded_stream` — use type-checked
|
|
54
|
+
`as_filter_list` / `as_parms_list` helpers instead of `Array(...)`,
|
|
55
|
+
which silently converts a Hash `DecodeParms` to `[[:k, :v], ...]`
|
|
56
|
+
and bypasses the predictor.
|
|
57
|
+
* `Pdfrb::Source::ObjectReader#load_from_objstm` — unpack the
|
|
58
|
+
`[oid, value]` pair from ObjectStreamReader and re-wrap via
|
|
59
|
+
`document.wrap` so type-dispatch (Catalog, Pages, etc.) works for
|
|
60
|
+
compressed objects.
|
|
61
|
+
* `Pdfrb::Document::Pages#count` — dereference Reference-typed `/Count`
|
|
62
|
+
before treating as Integer; fall back to walking the Kids tree.
|
|
63
|
+
* `Pdfrb::Document::Pages#walk` — robust against Reference-typed
|
|
64
|
+
`/Kids` arrays (common in FOP output).
|
|
65
|
+
|
|
66
|
+
### Added — 2026-07-30 (session 2)
|
|
67
|
+
|
|
68
|
+
**Phase 2 — COS layer (TODOs 08–14).**
|
|
69
|
+
|
|
70
|
+
* `Pdfrb::Model::Object` — base wrapper with `value`, `oid`, `gen`,
|
|
71
|
+
`document`; `indirect?`, `must_be_indirect?`, `deref`, `pdf_type`.
|
|
72
|
+
* `Pdfrb::Model::Reference` — frozen value object by `(oid, gen)`,
|
|
73
|
+
hashable, comparable, serialises as `"5 0 R"`.
|
|
74
|
+
* `Pdfrb::Model::PdfArray < Object` — Enumerable wrapper around an
|
|
75
|
+
Array of PDF values, with full mutation API and oid/gen/document
|
|
76
|
+
support for indirect arrays.
|
|
77
|
+
* `Pdfrb::Model::Rectangle` — immutable `[llx lly urx ury]` value
|
|
78
|
+
with `width`, `height`, `left`/`right`/`top`/`bottom`.
|
|
79
|
+
* `Pdfrb::Model::Matrix` — immutable `[a b c d e f]` affine with the
|
|
80
|
+
PDF-correct column-vector composition (`M1 * M2` applies M2 then
|
|
81
|
+
M1) and translate/scale/rotate/skew factories.
|
|
82
|
+
* `Pdfrb::Model::Date` — PDF date `D:YYYYMMDDHHmmSSOHH'mm'` <-> `Time`.
|
|
83
|
+
* `Pdfrb::Model::Cos::NameEncoding` — Symbol <-> `/...` wire format
|
|
84
|
+
with `#xx` escape encode/decode.
|
|
85
|
+
* `Pdfrb::Model::Cos::StringEncoding` — text/binary string helpers:
|
|
86
|
+
UTF-16BE BOM detection, full PDFDocEncoding table (Appendix D.2),
|
|
87
|
+
PDFDocEncoding <-> UTF-8 conversion.
|
|
88
|
+
* `Pdfrb::Model::Cos::Fields::Field` — typed field metadata with
|
|
89
|
+
`resolved_types`, `valid_value?`, Arlington slot.
|
|
90
|
+
* `Pdfrb::Model::Cos::Fields` converters: Dictionary, Array, String,
|
|
91
|
+
PDFByteString, Date, Rectangle, Integer — selected by `usable_for?`
|
|
92
|
+
and applied in order via `Fields.apply`.
|
|
93
|
+
* `Pdfrb::Model::Cos::Dictionary` — base class with `define_field`,
|
|
94
|
+
`field`, `each_field`, type registry (`register_type`/`lookup_type`),
|
|
95
|
+
`[]`/`[]=` with full pipeline (default -> dereference -> unbox ->
|
|
96
|
+
convert), `each`/`each_raw`, `validate`.
|
|
97
|
+
* `Pdfrb::Model::Cos::Stream < Dictionary` — raw-bytes holder with
|
|
98
|
+
`decoded_stream` / `encoded_stream=` that drives `Pdfrb::Filter`.
|
|
99
|
+
* `Pdfrb::Document` — top-level facade with `wrap`, `add`,
|
|
100
|
+
`object`/`dereference`, `register_listener`/`dispatch_message`.
|
|
101
|
+
|
|
102
|
+
**Phase 5 partial — Filters (TODOs 34–36).**
|
|
103
|
+
|
|
104
|
+
* `Pdfrb::Filter` module + registry; `Filter.apply(bytes, filters:,
|
|
105
|
+
parms:, direction:, document:)` chains decoders/encoders.
|
|
106
|
+
* `Pdfrb::Filter::Base` — included interface; subclasses call
|
|
107
|
+
`register_as "Name"`.
|
|
108
|
+
* `Pdfrb::Filter::FlateDecode` — zlib + PNG predictor unfiltering
|
|
109
|
+
(None/Sub/Up/Average/Paeth).
|
|
110
|
+
* `Pdfrb::Filter::ASCIIHexDecode` — hex <-> bytes with EOD marker `>`.
|
|
111
|
+
|
|
112
|
+
**Phase 6 — Arlington layer (TODOs 45–53).**
|
|
113
|
+
|
|
114
|
+
* Vendored `data/pdfrb/arlington/latest/*.tsv` — 613 TSV files from
|
|
115
|
+
`~/src/pdfa/arlington-pdf-model/tsv/latest/`. Single source of
|
|
116
|
+
truth for PDF object model.
|
|
117
|
+
* `Pdfrb::Arlington::Loader` — lazy TSV reader with `(name, version)`
|
|
118
|
+
memoisation. `object_definition("Catalog")` returns a parsed
|
|
119
|
+
`ObjectDefinition`.
|
|
120
|
+
* `Pdfrb::Arlington::ObjectDefinition` / `FieldDefinition` — typed
|
|
121
|
+
records for one TSV / one row. FieldDefinition exposes bare types,
|
|
122
|
+
required/predicate-split required, links, possible-value lists.
|
|
123
|
+
* `Pdfrb::Arlington::Type` — the 17 type symbols + validity check.
|
|
124
|
+
* `Pdfrb::Arlington::PdfVersion` — Comparable value object with full
|
|
125
|
+
`.from_tsv_cell` parsing (plain, `fn:Extension(name, ver)`, `fn:Eval`).
|
|
126
|
+
* `Pdfrb::Arlington::Predicate::Lexer/Parser/AST/Evaluator/Context`
|
|
127
|
+
— full `fn:` mini-DSL: tokeniser, recursive-descent parser
|
|
128
|
+
(logical ops require parens per spec), evaluator with `@key`,
|
|
129
|
+
`parent::`, `trailer::` path resolution, and BinOp/UnaryOp/LogicalOp
|
|
130
|
+
evaluation.
|
|
131
|
+
* `Pdfrb::Arlington::Predicate::Functions` registry + 6 built-in
|
|
132
|
+
groups (OCP: one file per category):
|
|
133
|
+
- `version.rb` — SinceVersion, BeforeVersion, Deprecated,
|
|
134
|
+
IsPDFVersion, Extension.
|
|
135
|
+
- `presence.rb` — IsRequired, IsPresent, NotPresent.
|
|
136
|
+
- `logical.rb` — Eval, Not, And, Or.
|
|
137
|
+
- `arithmetic.rb` — ArrayLength, StringLength, RequiredValue,
|
|
138
|
+
BitSet, BitsClear, BitsSet, KeyNameIsColorant, NoCycle.
|
|
139
|
+
- `reference.rb` — MustBeDirect, MustBeIndirect.
|
|
140
|
+
- `file.rb` — FileSize.
|
|
141
|
+
* `Dictionary.arlington_object "Name"` — pulls field metadata from
|
|
142
|
+
the matching TSV at class-load time and feeds it through
|
|
143
|
+
`define_field`. Type mapping from the 17 Arlington symbols to Ruby
|
|
144
|
+
classes (booleans -> [TrueClass, FalseClass], name -> Symbol,
|
|
145
|
+
rectangle -> Rectangle, etc.).
|
|
146
|
+
|
|
147
|
+
**Phase 15 partial — fixture corpus sourcing (TODOs 148, 158).**
|
|
148
|
+
|
|
149
|
+
* `claricle/pdf-core-examples` forked from
|
|
150
|
+
`pdf-association/pdf-core-examples` (private). The `ci` team is on
|
|
151
|
+
both `claricle/pdfrb` and `claricle/pdf-core-examples`, so
|
|
152
|
+
`claricle-ci` (already on `ci`) can pull examples in CI using
|
|
153
|
+
`CLARICLE_CI_PAT_TOKEN`.
|
|
154
|
+
* TODO 148 updated: corpus is fetched (not committed) via
|
|
155
|
+
`rake fixtures:pull`; `spec/fixtures/pdf-core-examples/` is
|
|
156
|
+
gitignored.
|
|
157
|
+
* TODO 158 added: GitHub Actions workflow that pulls the corpus
|
|
158
|
+
before rspec.
|
|
159
|
+
|
|
160
|
+
### Stats
|
|
161
|
+
|
|
162
|
+
* 163 specs, 0 failures, 0 rubocop offenses.
|
|
163
|
+
* 39 source files under `lib/`, 12 spec files under `spec/`.
|
|
164
|
+
* 613 vendored TSVs under `data/pdfrb/arlington/latest/`.
|
|
165
|
+
* 158 TODO files in `TODO.general-rels/` (added 158 for CI).
|
|
166
|
+
|
|
167
|
+
### Code quality
|
|
168
|
+
|
|
169
|
+
* Pure Ruby `autoload` everywhere; no `require_relative` in lib/.
|
|
170
|
+
* No `respond_to?` for type checks, no `instance_variable_set/get`,
|
|
171
|
+
no `send` to private methods.
|
|
172
|
+
* `# frozen_string_literal: true` on every `.rb`.
|
|
173
|
+
* Real instances in specs, never `double()`.
|
|
174
|
+
|
|
175
|
+
---
|
|
176
|
+
|
|
177
|
+
### Added — 2026-07-30
|
|
178
|
+
|
|
179
|
+
**0.1.0 — initial scaffold.**
|
|
180
|
+
|
|
181
|
+
The pdfrb gem is created as a pure-Ruby PDF library modelled on the
|
|
182
|
+
sibling `postscript` gem and HexaPDF, with the PDF object model driven
|
|
183
|
+
directly by the vendored Arlington PDF Model TSVs.
|
|
184
|
+
|
|
185
|
+
* Project skeleton: gemspec, Gemfile, Rakefile (default = spec +
|
|
186
|
+
rubocop), `.rspec`, `.rubocop.yml` (Cimas base + rspec/performance/
|
|
187
|
+
rake plugins), `.gitignore`, `.gitattributes` (TSV EOL=LF).
|
|
188
|
+
* `Pdfrb::PdfConstants` — PDF lexical constants (header magic, EOL,
|
|
189
|
+
whitespace, delimiters, version enumeration, keywords) per
|
|
190
|
+
ISO 32000-2:2020 s7.2.
|
|
191
|
+
* `Pdfrb::Error` hierarchy — typed errors for every failure mode:
|
|
192
|
+
`ParseError` (with `source_position`), `LexError`, `SyntaxError`,
|
|
193
|
+
`MalformedPdfError` (with `recovered?`), `SerializeError`,
|
|
194
|
+
`FilterError` (with `filter_name`), `EncryptionError`,
|
|
195
|
+
`UnsupportedVersionError`, `ObjectReferenceError` (with oid/gen),
|
|
196
|
+
`ValidationError` (with field/predicate names).
|
|
197
|
+
* `Pdfrb::Configuration` — per-Document frozen settings hash with
|
|
198
|
+
deep-merge. Defaults for malformed-PDF recovery, auto-decrypt,
|
|
199
|
+
invalid-string handling.
|
|
200
|
+
* `Pdfrb::DataDir` — resolves paths under the gem's bundled
|
|
201
|
+
`data/pdfrb/` (Arlington TSVs, AFM, ICC, etc.).
|
|
202
|
+
* Top-level `lib/pdfrb.rb` autoload tree for all planned namespaces
|
|
203
|
+
(Source, Model, Arlington, Filter, Content, Encryption,
|
|
204
|
+
DigitalSignature, Font, FontLoader, ImageLoader, Layout, Task,
|
|
205
|
+
Serializer, Writer, Importer, Revision(s), XrefSection, Document,
|
|
206
|
+
Composer, CLI). Lazy: file not loaded until constant accessed.
|
|
207
|
+
* `Rakefile` `arlington:refresh` task to re-vendor TSVs from
|
|
208
|
+
`~/src/pdfa/arlington-pdf-model/tsv/latest/`.
|
|
209
|
+
* `CLAUDE.md` onboarding doc.
|
|
210
|
+
* `TODO.general-rels/` work-breakdown structure (157 entries across
|
|
211
|
+
16 phases).
|
|
212
|
+
|
|
213
|
+
### Architecture
|
|
214
|
+
|
|
215
|
+
Mirrors `postscript`'s layered split (Source / Model / Serializer)
|
|
216
|
+
extended for PDF's needs. The differentiator vs HexaPDF is that
|
|
217
|
+
field metadata is loaded at runtime from the vendored Arlington TSVs
|
|
218
|
+
(single source of truth) rather than hand-coded via `define_field`.
|
|
219
|
+
|
|
220
|
+
### Code quality
|
|
221
|
+
|
|
222
|
+
* Pure Ruby `autoload` everywhere; no `require_relative` in lib/.
|
|
223
|
+
* No `respond_to?` for type checks, no `instance_variable_set/get`,
|
|
224
|
+
no `send` to private methods.
|
|
225
|
+
* `# frozen_string_literal: true` on every `.rb`.
|
|
226
|
+
* Real instances in specs, never `double()`.
|
data/CLAUDE.md
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
# CLAUDE.md
|
|
2
|
+
|
|
3
|
+
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
4
|
+
|
|
5
|
+
## What this is
|
|
6
|
+
|
|
7
|
+
`pdfrb` is a pure-Ruby PDF library: a byte-level reader, an Arlington-model-driven typed domain model, and a serializer. The PDF object model is sourced **directly** from the vendored Arlington PDF Model TSVs (the machine-readable definition of ISO 32000-2:2020), so field metadata, version predicates, and validators stay aligned with the spec by *data*, not by hand-coded mimicry.
|
|
8
|
+
|
|
9
|
+
Two-direction contract:
|
|
10
|
+
- *"PDF file <=> Model"* — parse PDF bytes into a typed Model and serialize a Model back to PDF bytes. Round-trip is the correctness backbone.
|
|
11
|
+
- *"API Builder Input => Model"* — `Document`, `Canvas` build a typed Model from user intent; the serializer then writes it. (Layout concerns live in the sibling `arroolio` gem.)
|
|
12
|
+
|
|
13
|
+
Mirrors the layered design of the sibling `postscript` gem (PS/EPS). Architectural blueprint cross-referenced against HexaPDF.
|
|
14
|
+
|
|
15
|
+
## Commands
|
|
16
|
+
|
|
17
|
+
```sh
|
|
18
|
+
bundle install # first-time setup
|
|
19
|
+
bundle exec rake # default task: spec + rubocop
|
|
20
|
+
bundle exec rspec # all specs
|
|
21
|
+
bundle exec rspec spec/pdfrb/error_spec.rb:42 # one spec by line number
|
|
22
|
+
bundle exec rubocop # lint
|
|
23
|
+
bundle exec rubocop -A # lint + safe autocorrect
|
|
24
|
+
bundle exec rake arlington:refresh # re-vendor TSVs from ~/src/pdfa/arlington-pdf-model/tsv/
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Run `bin/console` (create it if missing) for an interactive prompt preloaded with `Pdfrb`.
|
|
28
|
+
|
|
29
|
+
## Architecture (big picture)
|
|
30
|
+
|
|
31
|
+
| Layer | Owns | File |
|
|
32
|
+
|---|---|---|
|
|
33
|
+
| `Pdfrb::Source` | PDF bytes → tokens → COS object graph (read direction) | `lib/pdfrb/source.rb` |
|
|
34
|
+
| `Pdfrb::Model` | Typed PDF domain model: COS scalars + `Type::*` semantics | `lib/pdfrb/model.rb` |
|
|
35
|
+
| `Pdfrb::Arlington` | Loads vendored TSVs; evaluates `fn:` predicates. **Drives `Model` field definitions.** | `lib/pdfrb/arlington.rb` |
|
|
36
|
+
| `Pdfrb::Filter` | Stream filter pipeline (FlateDecode, LZWDecode, ...) | `lib/pdfrb/filter.rb` |
|
|
37
|
+
| `Pdfrb::Content` | Content-stream operators + Canvas drawing API | `lib/pdfrb/content.rb` |
|
|
38
|
+
| `Pdfrb::Serializer` | Model → PDF bytes (COS values) | `lib/pdfrb/serializer.rb` |
|
|
39
|
+
| `Pdfrb::Writer` | Document → file (xref + trailer assembly) | `lib/pdfrb/writer.rb` |
|
|
40
|
+
| `Pdfrb::Document` | Top-level facade | `lib/pdfrb/document.rb` |
|
|
41
|
+
|
|
42
|
+
### Layering rule (MECE)
|
|
43
|
+
|
|
44
|
+
Reader and Writer both depend on `Model` only. `Model` depends on `Arlington` for field metadata. `Content` extends `Model` with canvas + operators. Never shortcut across layers — the Serializer must never read bytes; the Parser must never write them.
|
|
45
|
+
|
|
46
|
+
### Autoload rule
|
|
47
|
+
|
|
48
|
+
Internal code uses **only** `autoload`, declared in the **immediate parent namespace's file**. Never `require_relative`, never `require "pdfrb/..."` for code in this gem (only `require` stdlib + gem deps). Create a namespace's file before adding children under it.
|
|
49
|
+
|
|
50
|
+
```ruby
|
|
51
|
+
# lib/pdfrb.rb
|
|
52
|
+
module Pdfrb
|
|
53
|
+
autoload :Source, "pdfrb/source" # lib/pdfrb/source.rb exists and holds Source's children autoloads
|
|
54
|
+
autoload :Model, "pdfrb/model" # lib/pdfrb/model.rb exists and holds Model's children autoloads
|
|
55
|
+
...
|
|
56
|
+
end
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### Arlington integration
|
|
60
|
+
|
|
61
|
+
Each `Pdfrb::Model::Type::*` class declares `arlington_object "Catalog"` (or the matching TSV name). Calling it materializes `Field` objects from the vendored TSV in `data/pdfrb/arlington/latest/` and wires them into the dictionary's field set. Validation invokes predicate evaluators (`fn:IsRequired(...)`, `fn:SinceVersion(...)`, etc.).
|
|
62
|
+
|
|
63
|
+
**Never hand-edit field metadata on a `Model::Type::*` class.** The TSVs are the single source of truth. If a field is wrong, fix the TSV upstream and re-run `rake arlington:refresh`.
|
|
64
|
+
|
|
65
|
+
## Conventions (project-specific)
|
|
66
|
+
|
|
67
|
+
- `# frozen_string_literal: true` on **every** `.rb`.
|
|
68
|
+
- Immutable value objects. `freeze` in constructors where data crosses a layer boundary (mirrors `postscript`).
|
|
69
|
+
- Errors: every failure mode subclasses `Pdfrb::Error` and carries typed metadata (`source_position`, `filter_name`, `oid`/`gen`, `field_name`, etc.). See `lib/pdfrb/error.rb`.
|
|
70
|
+
- Specs: real instances, never `double()`. Use `Struct.new` for plain-data stand-ins. Property specs (`spec/pdfrb/round_trip_spec.rb`) are the correctness backbone.
|
|
71
|
+
- Forbidden Ruby patterns (per global memory):
|
|
72
|
+
- `send` to private methods
|
|
73
|
+
- `instance_variable_set` / `instance_variable_get`
|
|
74
|
+
- `respond_to?` for type checks — use `is_a?`
|
|
75
|
+
- hand-rolled `to_h`/`from_h`/`to_json`/etc. on model classes — declare fields, let the framework serialize
|
|
76
|
+
- Semantic types live under `Pdfrb::Model::Type::*` and are named after the matching Arlington TSV (e.g. `Catalog` ↔ `Catalog.tsv`).
|
|
77
|
+
- Content operators follow the registry pattern: one subclass per operator, `register_as` at the bottom of the file (mirrors `postscript`'s `Model::Operators`).
|
|
78
|
+
- Filters follow the same registry pattern: one subclass per filter, registered in `Pdfrb::Filter::REGISTRY`.
|
|
79
|
+
- Tests live under `spec/pdfrb/` mirroring the `lib/pdfrb/` structure. One spec file per source file.
|
|
80
|
+
|
|
81
|
+
## Where to look first
|
|
82
|
+
|
|
83
|
+
Before touching anything, read these five files in order:
|
|
84
|
+
|
|
85
|
+
1. `lib/pdfrb.rb` — autoload tree, the public surface.
|
|
86
|
+
2. `lib/pdfrb/error.rb` — failure taxonomy.
|
|
87
|
+
3. `lib/pdfrb/source.rb` — reading layer entry point.
|
|
88
|
+
4. `lib/pdfrb/model.rb` — domain model entry point.
|
|
89
|
+
5. `lib/pdfrb/arlington.rb` — model-driven-ness engine.
|
|
90
|
+
|
|
91
|
+
Then read the matching TODO entry in `TODO.general-rels/` for the feature you're working on.
|
|
92
|
+
|
|
93
|
+
## Reference repositories
|
|
94
|
+
|
|
95
|
+
These repos live outside the project tree but are the authoritative references. Paths assume the user's standard layout (`~/src/`).
|
|
96
|
+
|
|
97
|
+
| Path | Role |
|
|
98
|
+
|---|---|
|
|
99
|
+
| `~/src/claricle/postscript/` | Sibling gem to mimic — autoload pattern, layered Source/Model/Serializer, error hierarchy, rspec/rubocop setup. |
|
|
100
|
+
| `~/src/pdfa/arlington-pdf-model/` | Canonical PDF object model: ~600 TSV files (one per PDF object type) + `fn:` predicate grammar. **This is the data we port.** Refresh via `rake arlington:refresh`. |
|
|
101
|
+
| `~/src/external/hexapdf/` | Reference Ruby implementation. Architectural blueprint for Tokenizer/Parser/Dictionary/Type::*/Writer/Content/Canvas, security handlers, layout. We differ by sourcing field metadata from Arlington rather than hand-coding it. |
|
|
102
|
+
| `~/src/pdfa/spec-pdf-core/` | AsciiDoc source of ISO 32000-2 itself — text-of-truth for human reference, not a test corpus. |
|
|
103
|
+
| `~/src/pdfa/appnote-pdf20-002-af/` | PDF 2.0 Application Note 002 — Associated Files (`AF` key semantics, when `AF` is required, `EmbeddedFile` relationship). |
|
|
104
|
+
| `~/src/pdfa/appnote-pdf20-003-metadata/` | PDF 2.0 Application Note 003 — locations for object metadata streams (`Metadata` key placement; DPM stream exclusion). |
|
|
105
|
+
| `~/src/pdfa/technote-pdfua1-001/` | PDF/UA-1 Technical Note 001 — `ActualText` on `Figure` structure elements. |
|
|
106
|
+
| `~/src/pdfa/technote-pdfua1-002/` | PDF/UA-1 Technical Note 002 — `Reference` structure elements containing links. |
|
|
107
|
+
|
|
108
|
+
## Work in progress
|
|
109
|
+
|
|
110
|
+
The gem is at 0.1.0 — foundation only (autoload tree, error hierarchy, constants, configuration). All remaining implementation work is tracked as individual TODO files in `TODO.general-rels/`. The master index is `TODO.general-rels/README.md`. Pick up work in dependency order; each TODO file's front-matter declares `depends_on`.
|
data/Gemfile
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
source "https://rubygems.org"
|
|
4
|
+
|
|
5
|
+
gemspec
|
|
6
|
+
|
|
7
|
+
gem "pry", "~> 0.14"
|
|
8
|
+
gem "rake", "~> 13.0"
|
|
9
|
+
gem "rspec", "~> 3.13"
|
|
10
|
+
gem "rubocop", "~> 1.75"
|
|
11
|
+
gem "rubocop-performance", "~> 1.23"
|
|
12
|
+
gem "rubocop-rake", "~> 0.7"
|
|
13
|
+
gem "rubocop-rspec", "~> 3.5"
|
data/LICENSE
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
BSD 2-Clause License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026, Ribose Inc.
|
|
4
|
+
All rights reserved.
|
|
5
|
+
|
|
6
|
+
Redistribution and use in source and binary forms, with or without
|
|
7
|
+
modification, are permitted provided that the following conditions are met:
|
|
8
|
+
|
|
9
|
+
1. Redistributions of source code must retain the above copyright notice, this
|
|
10
|
+
list of conditions and the following disclaimer.
|
|
11
|
+
|
|
12
|
+
2. Redistributions in binary form must reproduce the above copyright notice,
|
|
13
|
+
this list of conditions and the following disclaimer in the documentation
|
|
14
|
+
and/or other materials provided with the distribution.
|
|
15
|
+
|
|
16
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
17
|
+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
18
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
19
|
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
20
|
+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
21
|
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
22
|
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
23
|
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
24
|
+
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
25
|
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
data/README.adoc
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
= Pdfrb
|
|
2
|
+
|
|
3
|
+
Pure-Ruby PDF library: a byte-level reader, an Arlington-model-driven
|
|
4
|
+
typed domain model, and a serializer. The PDF object model is sourced
|
|
5
|
+
_directly_ from the vendored Arlington PDF Model TSVs (the
|
|
6
|
+
machine-readable definition of ISO 32000-2:2020), so field metadata,
|
|
7
|
+
version predicates, and validators stay aligned with the spec by
|
|
8
|
+
_data_, not by hand-coded mimicry.
|
|
9
|
+
|
|
10
|
+
Two-direction contract:
|
|
11
|
+
|
|
12
|
+
* *"PDF file <=> Model"* — parse PDF bytes into a typed Model and
|
|
13
|
+
serialize a Model back to PDF bytes. Round-trip is the correctness
|
|
14
|
+
backbone.
|
|
15
|
+
* *"API Builder Input => Model"* — `Document` and `Canvas` build a
|
|
16
|
+
typed Model from user intent, which the serializer then writes.
|
|
17
|
+
|
|
18
|
+
Pdfrb is deliberately scoped to the PDF byte format. Layout concerns
|
|
19
|
+
(page templates, flows, line breaking, tables, etc.) live in the
|
|
20
|
+
sibling `arroolio` gem.
|
|
21
|
+
|
|
22
|
+
Mirrors the layered design of the sibling
|
|
23
|
+
https://github.com/claricle/postscript[postscript] gem (PS/EPS parser
|
|
24
|
+
+ serializer). Architecture blueprint cross-referenced against
|
|
25
|
+
https://github.com/gettalong/hexapdf[HexaPDF].
|
|
26
|
+
|
|
27
|
+
== Installation
|
|
28
|
+
|
|
29
|
+
[source,sh]
|
|
30
|
+
----
|
|
31
|
+
gem install pdfrb
|
|
32
|
+
----
|
|
33
|
+
|
|
34
|
+
== Usage (sketch — APIs land across the TODO sequence)
|
|
35
|
+
|
|
36
|
+
[source,ruby]
|
|
37
|
+
----
|
|
38
|
+
require "pdfrb"
|
|
39
|
+
|
|
40
|
+
# Read
|
|
41
|
+
doc = Pdfrb.open("input.pdf")
|
|
42
|
+
puts doc.catalog.pages.count
|
|
43
|
+
|
|
44
|
+
# Create
|
|
45
|
+
doc = Pdfrb::Document.new
|
|
46
|
+
page = doc.pages.add
|
|
47
|
+
page.canvas.text("Hello, PDF", at: [72, 720])
|
|
48
|
+
doc.write("hello.pdf")
|
|
49
|
+
----
|
|
50
|
+
|
|
51
|
+
== Architecture
|
|
52
|
+
|
|
53
|
+
[cols="1,4", options="header"]
|
|
54
|
+
|===
|
|
55
|
+
| Layer | Owns
|
|
56
|
+
| `Pdfrb::Source` | PDF bytes -> tokens -> COS object graph (read direction).
|
|
57
|
+
| `Pdfrb::Model` | Typed PDF domain model: COS scalars + `Type::*` semantics.
|
|
58
|
+
| `Pdfrb::Arlington` | Loads vendored TSVs; evaluates `fn:` predicates. Drives `Model` field definitions.
|
|
59
|
+
| `Pdfrb::Filter` | Stream filter pipeline (FlateDecode, LZWDecode, ...).
|
|
60
|
+
| `Pdfrb::Content` | Content-stream operators + Canvas drawing API.
|
|
61
|
+
| `Pdfrb::Serializer` | Model -> PDF bytes (COS).
|
|
62
|
+
| `Pdfrb::Writer` | Document -> file (xref + trailer assembly).
|
|
63
|
+
| `Pdfrb::Document` | Top-level facade.
|
|
64
|
+
|===
|
|
65
|
+
|
|
66
|
+
Adding a new PDF type = adding one `Model::Type::*` subclass that
|
|
67
|
+
declares `arlington_object "Name"`. Adding a new content operator =
|
|
68
|
+
one subclass + `register_as`. Adding a new filter = one subclass +
|
|
69
|
+
register. No switch edits (Open/Closed).
|
|
70
|
+
|
|
71
|
+
== Reference materials
|
|
72
|
+
|
|
73
|
+
[cols="1,4", options="header"]
|
|
74
|
+
|===
|
|
75
|
+
| Path | Role
|
|
76
|
+
| `~/src/claricle/postscript/` | Sibling gem to mimic for conventions.
|
|
77
|
+
| `~/src/pdfa/arlington-pdf-model/` | Canonical PDF object model (TSV data).
|
|
78
|
+
| `~/src/external/hexapdf/` | Reference Ruby implementation.
|
|
79
|
+
| `~/src/pdfa/spec-pdf-core/` | AsciiDoc source of ISO 32000-2.
|
|
80
|
+
| `~/src/pdfa/appnote-pdf20-002-af/` | App Note 002: Associated Files.
|
|
81
|
+
| `~/src/pdfa/appnote-pdf20-003-metadata/` | App Note 003: Metadata stream locations.
|
|
82
|
+
| `~/src/pdfa/technote-pdfua1-001/` | PDF/UA Tech Note 001: ActualText on Figure.
|
|
83
|
+
| `~/src/pdfa/technote-pdfua1-002/` | PDF/UA Tech Note 002: Reference elements with links.
|
|
84
|
+
|===
|
|
85
|
+
|
|
86
|
+
== License
|
|
87
|
+
|
|
88
|
+
BSD-2-Clause. See `LICENSE`.
|
data/Rakefile
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "bundler/gem_tasks"
|
|
4
|
+
require "rspec/core/rake_task"
|
|
5
|
+
require "rubocop/rake_task"
|
|
6
|
+
|
|
7
|
+
RSpec::Core::RakeTask.new(:spec)
|
|
8
|
+
RuboCop::RakeTask.new
|
|
9
|
+
|
|
10
|
+
task default: %i[spec rubocop]
|
|
11
|
+
|
|
12
|
+
namespace :arlington do
|
|
13
|
+
desc "Re-vendor the Arlington TSVs from ~/src/pdfa/arlington-pdf-model/tsv/latest"
|
|
14
|
+
task :refresh do
|
|
15
|
+
require "fileutils"
|
|
16
|
+
|
|
17
|
+
source = File.expand_path("~/src/pdfa/arlington-pdf-model/tsv")
|
|
18
|
+
dest_root = File.expand_path("data/pdfrb/arlington", __dir__)
|
|
19
|
+
|
|
20
|
+
unless File.directory?(source)
|
|
21
|
+
warn "Arlington source not found at #{source}"
|
|
22
|
+
exit 1
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
FileUtils.rm_rf(dest_root)
|
|
26
|
+
FileUtils.cp_r(source, dest_root)
|
|
27
|
+
puts "Refreshed Arlington TSVs -> #{dest_root}"
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
namespace :fixtures do
|
|
32
|
+
desc "Pull fixture corpus from claricle/pdf-core-examples"
|
|
33
|
+
task :pull do
|
|
34
|
+
token = ENV["CLARICLE_CI_PAT_TOKEN"] || ENV["GH_TOKEN"]
|
|
35
|
+
if token.nil? || token.empty?
|
|
36
|
+
warn "No CLARICLE_CI_PAT_TOKEN set — skipping fixture pull"
|
|
37
|
+
next
|
|
38
|
+
end
|
|
39
|
+
dir = File.expand_path("spec/fixtures/pdf-core-examples", __dir__)
|
|
40
|
+
FileUtils.rm_rf(dir) if Dir.exist?(dir)
|
|
41
|
+
system("git clone --depth 1 " \
|
|
42
|
+
"https://x-access-token:#{token}@github.com/claricle/pdf-core-examples " \
|
|
43
|
+
"#{dir}") || warn("Failed to clone fixture corpus")
|
|
44
|
+
end
|
|
45
|
+
end
|
data/benchmarks/bench.rb
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
# Benchmark script. Run with: bundle exec ruby benchmarks/bench.rb
|
|
5
|
+
# Compares pdfrb parse/serialize performance against HexaPDF (if installed).
|
|
6
|
+
|
|
7
|
+
require "bundler/setup"
|
|
8
|
+
require "pdfrb"
|
|
9
|
+
require "benchmark"
|
|
10
|
+
require "stringio"
|
|
11
|
+
|
|
12
|
+
def generate_test_pdf(pages: 10)
|
|
13
|
+
doc = Pdfrb::Document.new
|
|
14
|
+
font = doc.fonts.add("Helvetica")
|
|
15
|
+
pages.times do |i|
|
|
16
|
+
page = doc.pages.add
|
|
17
|
+
page.canvas.text("Page #{i + 1} — the quick brown fox", at: [72, 720], font: font, size: 12)
|
|
18
|
+
end
|
|
19
|
+
out = StringIO.new
|
|
20
|
+
doc.write(io: out)
|
|
21
|
+
out.string
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
pdf_bytes = generate_test_pdf(pages: 10)
|
|
25
|
+
puts "Test PDF: #{pdf_bytes.bytesize} bytes, 10 pages"
|
|
26
|
+
puts
|
|
27
|
+
|
|
28
|
+
n = 100
|
|
29
|
+
Benchmark.bm(25) do |x|
|
|
30
|
+
x.report("parse (x#{n})") do
|
|
31
|
+
n.times { Pdfrb::Document.new(io: StringIO.new(pdf_bytes)) }
|
|
32
|
+
end
|
|
33
|
+
x.report("serialize (x#{n})") do
|
|
34
|
+
n.times do
|
|
35
|
+
doc = Pdfrb::Document.new
|
|
36
|
+
font = doc.fonts.add("Helvetica")
|
|
37
|
+
doc.pages.add.canvas.text("bench", at: [72, 720], font: font, size: 12)
|
|
38
|
+
out = StringIO.new
|
|
39
|
+
doc.write(io: out)
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
x.report("round-trip (x#{n})") do
|
|
43
|
+
n.times do
|
|
44
|
+
doc = Pdfrb::Document.new(io: StringIO.new(pdf_bytes))
|
|
45
|
+
out = StringIO.new
|
|
46
|
+
doc.write(io: out)
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|