private static void Initialize(PdfLibWrapper pdf, string pdfFileName) { var options = new StringBuilder(); options.Append("compatibility={1.5}"); options.Append(" inmemory=false"); options.Append(" linearize=true"); options.Append(" optimize=true"); options.Append(" viewerpreferences={hidemenubar=false hidetoolbar=false hidewindowui=false}"); options.Append(" destination {type fitwindow page 1}"); options.Append($""); options.Append($""); var createDocumentResult = pdf.begin_document(pdfFileName, options.ToString()); if (createDocumentResult != 1) { throw new Exception($"PDFLib failed to create file '{pdfFileName}'"); } var defaultExtGState = pdf.create_gstate("blendmode=Normal opacityfill=1 opacitystroke=1 overprintmode=1 renderingintent=RelativeColorimetric"); pdf.set_info("Creator", "Xpresso [http://www.albelli.com]"); pdf.set_info("Title", "XpressoLight"); }
private static void GeneratePap720Pdf(PdfLibWrapper pdf) { var sourceFilePath = @"base_source.pdf"; var layout = LayoutRepository.GetAll().Single(l => l.PapCode == 720); pdf.begin_page_ext(layout.SheetWidth, layout.SheetHeight, string.Empty); foreach (var page in layout.Pages) { var sourcePdf = pdf.open_pdi_document(sourceFilePath, string.Empty); var pdfPage = pdf.open_pdi_page(sourcePdf, 1, ""); // todo: move mirroring setting to Layout pdf.fit_pdi_page(pdfPage, 0, 0, $"boxsize={{{page.Width} {page.Height}}} fitmethod=meet scale={{-1 1}}"); pdf.close_pdi_page(pdfPage); foreach (var pageElement in page.Elements) { pdf.setcolor("stroke", "rgb", 1.0, 1.0, 0.0, 0.0); pdf.rect(pageElement.Left, pageElement.Bottom, pageElement.Width, pageElement.Height); pdf.stroke(); var fontHandle = pdf.load_font(pageElement.Resource.FontName, "unicode", "errorpolicy=return"); pdf.setfont(fontHandle, pageElement.Resource.FontSize); pdf.fit_textline( pageElement.Resource.FileName, pageElement.Left, pageElement.Bottom, string.Empty); } } pdf.end_page_ext(string.Empty); }
private static void BuildPdf(PdfLibWrapper pdf, OutputFile outputFile) { foreach (var outputPage in outputFile.Pages) { pdf.begin_page_ext(outputFile.SheetSize.Width, outputFile.SheetSize.Height, string.Empty); foreach (var tile in outputPage.Tiles) { var sourcePdf = pdf.open_pdi_document(tile.SourceFilePath, string.Empty); // "pdiusebox=media" means that all content of the source pdf will be used, not only visible part (crop box), see pdflib api reference var sourcePage = pdf.open_pdi_page(sourcePdf, tile.SourcePage.Number, "pdiusebox=media"); var matchboxString = BuildPdfMatchboxString(tile.MediaBox, tile.CutBox, tile.SourcePage.CropBox); var orientationString = BuildPdfOrientationString(tile.MediaRotationAngle); var boxsizeString = BuildPdfBoxsizeString(tile.MediaBox); var fitmethodString = "fitmethod=clip"; // will cut everything that overflows fitbox boundaries var tilePlacementOptions = $"{matchboxString} {boxsizeString} {orientationString} {fitmethodString}"; pdf.fit_pdi_page(sourcePage, tile.MediaBox.Left, tile.MediaBox.Bottom, tilePlacementOptions); // todo: tech info var font = pdf.load_font("Helvetica", "unicode", ""); pdf.setfont(font, 20); pdf.fit_textline(matchboxString, tile.MediaBox.Left + 40, tile.MediaBox.Bottom + 30, string.Empty); pdf.close_pdi_page(sourcePage); } pdf.end_page_ext(string.Empty); } }
private static void DrawTestPage(PdfLibWrapper pdf) { pdf.begin_page_ext(500, 500, string.Empty); pdf.setcolor("stroke", "rgb", 1.0, 0.0, 0.0, 0.0); pdf.rect(5, 5, 490, 490); pdf.stroke(); pdf.end_page_ext(string.Empty); }
private static float GetPageRotationAngle(PdfLibWrapper pdf, int fileHandle, int page) { var objtype = pdf.pcos_get_string(fileHandle, $"type:pages[{page}]/Rotate"); if (objtype == "number") { return((float)pdf.pcos_get_number(fileHandle, $"pages[{page}]/Rotate")); } return(0.0f); }
private static Box ReadBox(PdfLibWrapper pdf, int fileHandle, int page, string boxName) { var boxLeft = (float)pdf.pcos_get_number(fileHandle, $"pages[{page}]/{boxName}[0]"); var boxBottom = (float)pdf.pcos_get_number(fileHandle, $"pages[{page}]/{boxName}[1]"); var boxRight = (float)pdf.pcos_get_number(fileHandle, $"pages[{page}]/{boxName}[2]"); var boxTop = (float)pdf.pcos_get_number(fileHandle, $"pages[{page}]/{boxName}[3]"); var box = new Box { Left = boxLeft, Bottom = boxBottom, Width = boxRight - boxLeft, Height = boxTop - boxBottom }; return(box); }
public string Generate(OutputFile outputFile) { var outputFileName = $"{DateTime.Now:yyyyMMdd-HHmmss}_test.pdf"; var outputFilePath = Path.Combine(_outputDirectory, outputFileName); var pdf = new PdfLibWrapper("W900205-010045-139339-E74DE2-79Q6F2"); InitializeLikeXpresso(pdf, outputFilePath); BuildPdf(pdf, outputFile); pdf.end_document(string.Empty); return(outputFilePath); }
private static void DrawBarcode(PdfLibWrapper pdf) { pdf.begin_page_ext(500, 500, string.Empty); var fontHandle = pdf.load_font("Code-39-20", "unicode", "embedding=true errorpolicy=return"); pdf.setfont(fontHandle, 20); pdf.fit_textline( "*X01882E2*", 20, 20, string.Empty); pdf.end_page_ext(string.Empty); }
private static SourcePage GetSourcePage(PdfLibWrapper pdf, int sourcePdf, int pageIndex) { var pageWidth = (float)pdf.pcos_get_number(sourcePdf, $"pages[{pageIndex}]/width"); var pageHeight = (float)pdf.pcos_get_number(sourcePdf, $"pages[{pageIndex}]/height"); var rotationAngle = GetPageRotationAngle(pdf, sourcePdf, pageIndex); return(new SourcePage { SheetSize = new Size { Width = pageWidth, Height = pageHeight }, RotationAngle = rotationAngle, //MediaBox = ReadBox(pdf, sourcePdf, pageIndex, "MediaBox"), CropBox = ReadBox(pdf, sourcePdf, pageIndex, "CropBox"), Number = pageIndex + 1 }); }
static void Main(string[] args) { var pdfFileName = "test.pdf"; var pdf = new PdfLibWrapper("W900205-010045-139339-E74DE2-79Q6F2"); Initialize(pdf, pdfFileName); //DrawTestPage(pdf); //DrawSourcePdf(pdf); //DrawBarcode(pdf); GeneratePap720Pdf(pdf); pdf.end_document(string.Empty); Console.WriteLine("Done"); Console.ReadKey(); }
public SourceFile Get(int albumId) { var fileName = $"9999.{albumId}.0.pdf"; var fullFilePath = Path.Combine(_storageFolderPath, fileName); var pdf = new PdfLibWrapper("W900205-010045-139339-E74DE2-79Q6F2"); var sourcePdf = pdf.open_pdi_document(fullFilePath, string.Empty); var pagesCount = (int)pdf.pcos_get_number(sourcePdf, "length:pages"); var file = new SourceFile { FileName = fullFilePath }; for (var pageIndex = 0; pageIndex < pagesCount; pageIndex++) { file.Pages.Add(GetSourcePage(pdf, sourcePdf, pageIndex)); } return(file); }
private static void DrawSourcePdf(PdfLibWrapper pdf) { var sourcePdf = pdf.open_pdi_document("base_source.pdf", string.Empty); var pagesCount = pdf.pcos_get_number(sourcePdf, "length:pages"); Console.WriteLine($"Pages count in source pdf: {pagesCount}"); for (var pageNumber = 1; pageNumber <= pagesCount; pageNumber++) { var page = pdf.open_pdi_page(sourcePdf, pageNumber, ""); pdf.begin_page_ext(500, 500, string.Empty); pdf.setcolor("stroke", "rgb", 1.0, 0.0, 0.0, 0.0); pdf.rect(5, 5, 490, 490); pdf.stroke(); pdf.fit_pdi_page(page, 10, 10, "boxsize={480 480} fitmethod=entire"); pdf.close_pdi_page(page); pdf.end_page_ext(string.Empty); } }
public static void DrawFilledBox(PdfLibWrapper pdf, double left, double bottom, double width, double height, Color color) { pdf.setcolor("fill", color.PdfColorSpace(), color.R / 255.0, color.G / 255.0, color.B / 255.0, 0); pdf.rect(left, bottom, width, height); pdf.fill(); }