private PdfLoadDocumentResponse HandleLoadPDF(PDFApi pdfApiInstance, PdfVersion outputVersion, FileToProcess fileToProcess, int workerNumber) { FileStream inputFileStream = null; try { PassportPDFParametersUtilities.GetLoadDocumentMultipartParameters(fileToProcess.FileAbsolutePath, outputVersion, out inputFileStream, out PdfConformance conformance, out string fileName); using (FileStream tmpFile = File.Create(Path.GetTempFileName(), 4096, FileOptions.DeleteOnClose)) { using (GZipStream dataStream = new GZipStream(tmpFile, CompressionLevel.Optimal, true)) { inputFileStream.CopyTo(dataStream); inputFileStream.Dispose(); inputFileStream = null; } tmpFile.Seek(0, SeekOrigin.Begin); return(PassportPDFRequestsUtilities.SendLoadPDFMultipartRequest(pdfApiInstance, workerNumber, fileToProcess.FileAbsolutePath, fileName, conformance, fileToProcess.Password, tmpFile, ContentEncoding.Gzip, UploadOperationStartEventHandler)); } } catch { if (inputFileStream != null) { inputFileStream.Dispose(); } throw; } }
/// <summary> /// Version of this instance. /// </summary> /// <returns></returns> public PdfVersion Version() { PdfVersion version = PdfVersion.PDF1_0; if (this.flags >= Flag.LockedContents) { version = PdfVersion.PDF1_7; } else if (this.flags >= Flag.ToggleNoView) { version = PdfVersion.PDF1_5; } else if (this.flags >= Flag.NoRotate) { version = PdfVersion.PDF1_3; } else if (this.flags >= Flag.Hidden) { version = PdfVersion.PDF1_2; } PdfVersion version2 = this.GetVersion(); if (version2 > version) { version = version2; } if (base.ContainsKey(PdfName.AP) && (version < PdfVersion.PDF1_2)) { version = PdfVersion.PDF1_2; } return(version); }
//-------------------------------------------------------------------------------------------------- public PdfWriter(PdfVersion version, int lastObjectNumber) { _ObjectOffsets = new long[lastObjectNumber]; _Stream = new MemoryStream(); Write($"%PDF-{(int)version / 10}.{(int)version % 10}\n"); // header Write("%öäüß\n"); // binary signature }
public TagStructureContext(PdfDocument document, PdfVersion tagStructureTargetVersion) { this.document = document; if (!document.IsTagged()) { throw new PdfException(PdfException.MustBeATaggedDocument); } connectedModelToStruct = new Dictionary <IAccessibleElement, PdfStructElem>(); connectedStructToModel = new Dictionary <PdfDictionary, IAccessibleElement>(); this.tagStructureTargetVersion = tagStructureTargetVersion; forbidUnknownRoles = true; NormalizeDocumentRootTag(); }
private void RegisterRules(PdfVersion pdfVersion) { ITaggingRule tableRule = new TableTaggingRule(); RegisterSingleRule(StandardRoles.TABLE, tableRule); RegisterSingleRule(StandardRoles.TFOOT, tableRule); RegisterSingleRule(StandardRoles.THEAD, tableRule); if (pdfVersion.CompareTo(PdfVersion.PDF_1_5) < 0) { TableTaggingPriorToOneFiveVersionRule priorToOneFiveRule = new TableTaggingPriorToOneFiveVersionRule(); RegisterSingleRule(StandardRoles.TABLE, priorToOneFiveRule); RegisterSingleRule(StandardRoles.THEAD, priorToOneFiveRule); RegisterSingleRule(StandardRoles.TFOOT, priorToOneFiveRule); } }
public void FromReader_ThrowsOnInvalidHeader(string header) { // Arrange // Act // Assert using (var pdfStream = BuildTestStream(header)) { using (var reader = new PdfReader(pdfStream)) { Assert.Throws <FormatException>(() => PdfVersion.FromReader(reader)); } } }
/// <summary> /// Do not use this constructor, instead use /// <see cref="iText.Kernel.Pdf.PdfDocument.GetTagStructureContext()"/> /// method. /// </summary> /// <remarks> /// Do not use this constructor, instead use /// <see cref="iText.Kernel.Pdf.PdfDocument.GetTagStructureContext()"/> /// method. /// <para /> /// Creates /// <c>TagStructureContext</c> /// for document. There shall be only one instance of this /// class per /// <c>PdfDocument</c>. /// </remarks> /// <param name="document">the document which tag structure will be manipulated with this class.</param> /// <param name="tagStructureTargetVersion">the version of the pdf standard to which the tag structure shall adhere. /// </param> public TagStructureContext(PdfDocument document, PdfVersion tagStructureTargetVersion) { this.document = document; if (!document.IsTagged()) { throw new PdfException(PdfException.MustBeATaggedDocument); } waitingTagsManager = new WaitingTagsManager(); namespaces = new LinkedHashSet <PdfDictionary>(); nameToNamespace = new Dictionary <String, PdfNamespace>(); this.tagStructureTargetVersion = tagStructureTargetVersion; forbidUnknownRoles = true; if (TargetTagStructureVersionIs2()) { InitRegisteredNamespaces(); SetNamespaceForNewTagsBasedOnExistingRoot(); } }
/// <summary> /// Version of this instance. /// </summary> /// <returns></returns> public PdfVersion Version() { PdfVersion version = PdfVersion.PDF1_0; if ((this.pageLayout == PageLayoutType.TwoPageLeft) || (this.pageLayout == PageLayoutType.TwoPageRight)) { version = PdfVersion.PDF1_5; } if (this.openType == OpenType.UseOC) { version = PdfVersion.PDF1_5; } if (this.openType == OpenType.UseAttachments) { version = PdfVersion.PDF1_6; } return(version); }
public void FromReader_ReadsPdfVersion() { // Arrange PdfVersion version; // Act using (var pdfStream = BuildTestStream("%PDF-1.6\r\n")) { using (var reader = new PdfReader(pdfStream)) { version = PdfVersion.FromReader(reader); } } // Assert Assert.NotNull(version); Assert.Equal(1, version.Major); Assert.Equal(6, version.Minor); }
public void WritesPdfHeader() { // Arrange var version = new PdfVersion(1, 2); string result; // Act using (var pdfStream = new MemoryStream()) { using (var writer = new PdfWriter(pdfStream)) { version.WriteHeader(writer); writer.Flush(); result = ReadAsString(pdfStream); } } // Assert Assert.Equal("%PDF-1.2\r\n", result); }
public void FromReader_ReadsPdfVersionAtBeginning() { // Arrange PdfVersion version; // Act using (var pdfStream = BuildTestStream("%PDF-1.4\r\nSome Content\r\n%PDF-1.6\r\n")) { using (var reader = new PdfReader(pdfStream)) { reader.Position = 22; version = PdfVersion.FromReader(reader); } } // Assert Assert.NotNull(version); Assert.Equal(1, version.Major); Assert.Equal(4, version.Minor); }
/// <summary> /// Writes the labeled object. /// </summary> /// <param name="obj">The obj.</param> protected void WriteLabeledObject(PdfObjectBase obj) { if (!this.crossTable.Contains(obj)) { if (obj is IVersionDepend) { PdfVersion version = ((IVersionDepend)obj).Version(); if (version > this.version) { this.version = version; this.refreshVersion = true; } } this.crossTable.Add(new PdfFileCrossRef(obj, this.psw.Position, true)); this.psw.WriteString(string.Format("{0} {1} ", new object[] { (int)obj.ObjectIndex, (int)obj.Generation })); this.psw.WriteBytes(objPrefix); obj.ToPdf(this); this.psw.WriteBytes(objSuffix); } }
public static bool IsValid(byte[] bytes, out PdfVersion version) { string dummy; return IsValid(bytes, out version, out dummy); }
/* ----------------------------------------------------------------- */ /// /// GetEncryptionMethod /// /// <summary> /// Gets an EncryptionMethod value from the specified version. /// </summary> /// /* ----------------------------------------------------------------- */ private EncryptionMethod GetEncryptionMethod(PdfVersion src) => src.Minor >= 7 ? EncryptionMethod.Aes256 : src.Minor >= 6 ? EncryptionMethod.Aes128 : src.Minor >= 4 ? EncryptionMethod.Standard128 : EncryptionMethod.Standard40;
private WorkflowProcessingResult ProcessWorkflow(PDFApi pdfApiInstance, ImageApi imageApiInstance, OperationsWorkflow workflow, FileToProcess fileToProcess, int workerNumber) { List <string> warningMessages = new List <string>(); bool contentRemoved = false; bool versionChanged = false; bool linearized = false; string fileID = null; foreach (Operation operation in workflow.OperationsToBePerformed) { Error actionError = null; ReduceErrorInfo reduceErrorInfo = null; long remainingTokens = 0; if (_cancellationPending) { return(null); } switch (operation.Type) { case Operation.OperationType.LoadPDF: PdfVersion outputVersion = (PdfVersion)operation.Parameters; PdfLoadDocumentResponse loadDocumentResponse = HandleLoadPDF(pdfApiInstance, outputVersion, fileToProcess, workerNumber); if (loadDocumentResponse == null) { OnError(LogMessagesUtils.ReplaceMessageSequencesAndReferences(FrameworkGlobals.MessagesLocalizer.GetString("message_invalid_response_received", FrameworkGlobals.ApplicationLanguage), actionName: "Load")); return(null); } remainingTokens = loadDocumentResponse.RemainingTokens; actionError = loadDocumentResponse.Error; fileID = loadDocumentResponse.FileId; break; case Operation.OperationType.LoadImage: ImageLoadResponse imageLoadResponse = HandleLoadImage(imageApiInstance, fileToProcess, workerNumber); if (imageLoadResponse == null) { OnError(LogMessagesUtils.ReplaceMessageSequencesAndReferences(FrameworkGlobals.MessagesLocalizer.GetString("message_invalid_response_received", FrameworkGlobals.ApplicationLanguage), actionName: "Load")); return(null); } remainingTokens = imageLoadResponse.RemainingTokens; actionError = imageLoadResponse.Error; fileID = imageLoadResponse.FileId; break; case Operation.OperationType.ReducePDF: PDFReduceActionConfiguration reduceActionConfiguration = (PDFReduceActionConfiguration)operation.Parameters; PdfReduceResponse reduceResponse = HandleReducePDF(pdfApiInstance, reduceActionConfiguration, fileToProcess, fileID, workerNumber, warningMessages); if (reduceResponse == null) { OnError(LogMessagesUtils.ReplaceMessageSequencesAndReferences(FrameworkGlobals.MessagesLocalizer.GetString("message_invalid_response_received", FrameworkGlobals.ApplicationLanguage), actionName: "Reduce")); return(null); } remainingTokens = reduceResponse.RemainingTokens; contentRemoved = reduceResponse.ContentRemoved; versionChanged = reduceResponse.VersionChanged; actionError = reduceResponse.Error; reduceErrorInfo = reduceResponse.ErrorInfo; linearized = reduceActionConfiguration.FastWebView; break; case Operation.OperationType.OCRPDF: PDFOCRActionConfiguration ocrActionConfiguration = (PDFOCRActionConfiguration)operation.Parameters; PdfOCRResponse ocrResponse = HandleOCRPDF(pdfApiInstance, ocrActionConfiguration, fileToProcess, fileID, workerNumber); if (ocrResponse == null) { OnError(LogMessagesUtils.ReplaceMessageSequencesAndReferences(FrameworkGlobals.MessagesLocalizer.GetString("message_invalid_response_received", FrameworkGlobals.ApplicationLanguage), actionName: "OCR")); return(null); } remainingTokens = ocrResponse.RemainingTokens; actionError = ocrResponse.Error; break; } if (actionError != null) { string errorMessage = reduceErrorInfo != null && reduceErrorInfo.ErrorCode != ReduceErrorCode.OK ? ErrorManager.GetMessageFromReduceActionError(reduceErrorInfo, fileToProcess.FileAbsolutePath) : ErrorManager.GetMessageFromPassportPDFError(actionError, operation.Type, fileToProcess.FileAbsolutePath); OnError(errorMessage); return(null); } else { RemainingTokensUpdateEventHandler.Invoke(remainingTokens); } } return(new WorkflowProcessingResult(contentRemoved, versionChanged, linearized, fileID, warningMessages)); }
public void Ctor_WhenCalledWithValidVersion_ShouldCreateInstance(int version) { var sut = new PdfVersion(version); Assert.Equal(version, sut.Number); }
public void ToString_WhenCalled_ShouldFormatString(int version, string str) { var sut = new PdfVersion(version); Assert.Equal(str, sut.ToString()); }
public static bool IsValid(byte[] bytes, out PdfVersion version, out string errorMessage) { version = PdfVersion.Unknown; if (bytes == null) throw new ArgumentNullException("bytes"); if (bytes.Length < 8) { errorMessage = "file to short."; return false; } // Check if file begins with '%PDF-' if (!bytes.Take(5).SequenceEqual(PDFBEGINBYTES)) { errorMessage = "Missing start-of-file mark."; return false; } if (bytes[5] == 0x31 && bytes[6] == 0x2E && bytes[7] == 0x31) // version is 1.2 ? { version = PdfVersion.Pdf1_0; } else if (bytes[5] == 0x31 && bytes[6] == 0x2E && bytes[7] == 0x31) // version is 1.2 ? { version = PdfVersion.Pdf1_1; } else if (bytes[5] == 0x31 && bytes[6] == 0x2E && bytes[7] == 0x32) // version is 1.2 ? { version = PdfVersion.Pdf1_2; if (!bytes.Skip(bytes.Length - 7).SequenceEqual(PDF12ENDBYTES1) && !bytes.Skip(bytes.Length - 6).SequenceEqual(PDF12ENDBYTES2)) { errorMessage = "PDF-1.2 missing End-Of-File mark."; return false; } } else if (bytes[5] == 0x31 && bytes[6] == 0x2E && bytes[7] == 0x33) // version is 1.3 ? { version = PdfVersion.Pdf1_3; } else if (bytes[5] == 0x31 && bytes[6] == 0x2E && bytes[7] == 0x34) // version is 1.4 ? { version = PdfVersion.Pdf1_4; } else if (bytes[5] == 0x31 && bytes[6] == 0x2E && bytes[7] == 0x35) // version is 1.4 ? { version = PdfVersion.Pdf1_5; } else if (bytes[5] == 0x31 && bytes[6] == 0x2E && bytes[7] == 0x36) // version is 1.4 ? { version = PdfVersion.Pdf1_6; } else if (bytes[5] == 0x31 && bytes[6] == 0x2E && bytes[7] == 0x37) // version is 1.4 ? { version = PdfVersion.Pdf1_7; } else { errorMessage = "Unknown or unsupported PDF Version."; return false; } // Some PDF files have NULLs at the end, let's skip them. int lenWithOutPadding = bytes.Reverse().SkipWhile(x => x == 0x0).Count(); if (!PDF_EOFS.Any(x => bytes.Take(lenWithOutPadding).Skip(lenWithOutPadding - x.Length).SequenceEqual(x))) { errorMessage = "Missing End-Of-File mark."; return false; } errorMessage = null; return true; }
public StandardHandlerUsingAes256(PdfDictionary encryptionDictionary, byte[] userPassword, byte[] ownerPassword , int permissions, bool encryptMetadata, bool embeddedFilesOnly, PdfVersion version) { isPdf2 = version != null && version.CompareTo(PdfVersion.PDF_2_0) >= 0; InitKeyAndFillDictionary(encryptionDictionary, userPassword, ownerPassword, permissions, encryptMetadata, embeddedFilesOnly); }
public static bool IsValid(byte[] bytes, out PdfVersion version, out string errorMessage) { version = PdfVersion.Unknown; if (bytes == null) { throw new ArgumentNullException("bytes"); } if (bytes.Length < 8) { errorMessage = "file to short."; return(false); } // Check if file begins with '%PDF-' if (!bytes.Take(5).SequenceEqual(PDFBEGINBYTES)) { errorMessage = "Missing start-of-file mark."; return(false); } if (bytes[5] == 0x31 && bytes[6] == 0x2E && bytes[7] == 0x31) // version is 1.2 ? { version = PdfVersion.Pdf1_0; } else if (bytes[5] == 0x31 && bytes[6] == 0x2E && bytes[7] == 0x31) // version is 1.2 ? { version = PdfVersion.Pdf1_1; } else if (bytes[5] == 0x31 && bytes[6] == 0x2E && bytes[7] == 0x32) // version is 1.2 ? { version = PdfVersion.Pdf1_2; if (!bytes.Skip(bytes.Length - 7).SequenceEqual(PDF12ENDBYTES1) && !bytes.Skip(bytes.Length - 6).SequenceEqual(PDF12ENDBYTES2)) { errorMessage = "PDF-1.2 missing End-Of-File mark."; return(false); } } else if (bytes[5] == 0x31 && bytes[6] == 0x2E && bytes[7] == 0x33) // version is 1.3 ? { version = PdfVersion.Pdf1_3; } else if (bytes[5] == 0x31 && bytes[6] == 0x2E && bytes[7] == 0x34) // version is 1.4 ? { version = PdfVersion.Pdf1_4; } else if (bytes[5] == 0x31 && bytes[6] == 0x2E && bytes[7] == 0x35) // version is 1.4 ? { version = PdfVersion.Pdf1_5; } else if (bytes[5] == 0x31 && bytes[6] == 0x2E && bytes[7] == 0x36) // version is 1.4 ? { version = PdfVersion.Pdf1_6; } else if (bytes[5] == 0x31 && bytes[6] == 0x2E && bytes[7] == 0x37) // version is 1.4 ? { version = PdfVersion.Pdf1_7; } else { errorMessage = "Unknown or unsupported PDF Version."; return(false); } // Some PDF files have NULLs at the end, let's skip them. int lenWithOutPadding = bytes.Reverse().SkipWhile(x => x == 0x0).Count(); if (!PDF_EOFS.Any(x => bytes.Take(lenWithOutPadding).Skip(lenWithOutPadding - x.Length).SequenceEqual(x))) { errorMessage = "Missing End-Of-File mark."; return(false); } errorMessage = null; return(true); }
public static bool IsValid(byte[] bytes, out PdfVersion version) { string dummy; return(IsValid(bytes, out version, out dummy)); }
/// <summary> /// Initializes a new instance of the <see cref="T:PdfImage" /> class. /// </summary> /// <param name="image">The image.</param> /// <param name="maskImage">The mask image.</param> public PdfImage(Image image, PdfImage maskImage) { if (image == null) { throw new PdfArgumentNullException("image"); } base.Properties.Add(PdfName.Type, PdfName.XObject); base.Properties.Add(PdfName.Subtype, PdfName.Image); base.Properties.Add(PdfName.Width, new PdfNumber((double)image.Width)); base.Properties.Add(PdfName.Height, new PdfNumber((double)image.Height)); if (image.Mask && ((image.Bpc == 1) || (image.Bpc > 0xff))) { base.Properties.Add(PdfName.ImageMask, PdfBool.TRUE); } if (maskImage != null) { if (image.Smask) { base.Properties.Add(PdfName.SMask, maskImage); this.version = PdfVersion.PDF1_4; } else { base.Properties.Add(PdfName.Mask, maskImage); this.version = PdfVersion.PDF1_3; } } if (image is RawImage) { base.Data.Write(image.RawData, 0, image.RawData.Length); int[] transparency = image.Transparency; if (transparency != null) { PdfArray array = PdfArray.Convert(transparency); base.Properties.Add(PdfName.Mask, array); } if (image.Bpc <= 0xff) { switch (image.Colorspace) { case 1: base.Properties.Add(PdfName.ColorSpace, PdfName.DeviceGray); break; case 3: base.Properties.Add(PdfName.ColorSpace, PdfName.DeviceRGB); break; default: base.Properties.Add(PdfName.ColorSpace, PdfName.DeviceCMYK); break; } if (image.Properties != null) { foreach (KeyValuePair <PdfName, PdfObjectBase> pair in image.Properties) { base.Properties[pair.Key] = pair.Value; } } base.Properties.Add(PdfName.BitsPerComponent, new PdfNumber((double)image.Bpc)); if (image.Deflated) { base.Filters.Enqueue(MockFilter.FlateFilter); return; } bool flag = false; foreach (PdfFilter filter in base.Filters) { if (filter is FlateFilter) { flag = true; break; } } if (!flag) { base.Filters.Enqueue(PdfFilter.FlateFilter); } } return; } else { ImageType type = image.Type; if ((type != ImageType.JPEG) && (type != ImageType.JPEG2000)) { throw new PdfUnrecognizedImageFormatException("Not a recognized Image Format."); } base.Filters.Enqueue((image.Type == ImageType.JPEG) ? MockFilter.DCTFilter : MockFilter.JPXFilter); if (image.Type == ImageType.JPEG2000) { this.version = PdfVersion.PDF1_5; } if (image.Colorspace <= 0) { goto Label_034F; } switch (image.Colorspace) { case 1: base.Properties.Add(PdfName.ColorSpace, PdfName.DeviceGray); goto Label_0333; case 3: base.Properties.Add(PdfName.ColorSpace, PdfName.DeviceRGB); goto Label_0333; } base.Properties.Add(PdfName.ColorSpace, PdfName.DeviceCMYK); } Label_0333: base.Properties.Add(PdfName.BitsPerComponent, new PdfNumber((double)image.Bpc)); Label_034F: if (image.RawData != null) { base.Data.Write(image.RawData, 0, image.RawData.Length); } }