PowerBuilder 12.5中从PostScript生成PDF的实现方案求助
Hey there! Let's walk through how to tweak your existing automation workflow to save PDFs instead of sending PostScript directly to the printer—this is a great move to cut down on printing costs. Below is a breakdown of the core logic, practical code snippets, and actionable options:
Your original workflow looks like:App generates PostScript → Send to printer (printer converts PS to PDF for printing)
To shift to saving PDFs, we'll replace the "send to printer" step with two key actions:
- Capture the PostScript output that was originally sent to the printer
- Convert that PostScript to a PDF file
- Store the PDF in your desired location (local, network share, cloud, etc.)
Option 1: Use Ghostscript (Cross-Platform, Open-Source)
Ghostscript is the industry standard for handling PostScript and PDF conversions—it's free, reliable, and works on Windows, macOS, and Linux.
Step-by-Step Workflow
- First, redirect your app's PostScript output to a temporary file (instead of sending it to the printer port)
- Run Ghostscript to convert the PS file to PDF
- Move the final PDF to your target storage location
Command Line Example
# Windows (using 64-bit Ghostscript) gswin64c.exe -sDEVICE=pdfwrite -dNOPAUSE -dBATCH -dSAFER -sOutputFile=final_invoice.pdf temp_output.ps # Linux/macOS gs -sDEVICE=pdfwrite -dNOPAUSE -dBATCH -dSAFER -sOutputFile=final_invoice.pdf temp_output.ps
Python Automation Script
If your workflow is built with Python, you can wrap this logic into a reusable function:
import subprocess import os def ps_to_pdf(ps_file_path, output_pdf_dir, file_name): # Check if Ghostscript is installed try: subprocess.run(["gs", "--version"], check=True, capture_output=True) except FileNotFoundError: raise Exception("Ghostscript is missing! Please install it first to proceed.") # Build full output path output_pdf_path = os.path.join(output_pdf_dir, file_name) # Run conversion command conversion_cmd = [ "gs", "-sDEVICE=pdfwrite", "-dNOPAUSE", "-dBATCH", "-dSAFER", "-sOutputFile=" + output_pdf_path, ps_file_path ] result = subprocess.run(conversion_cmd, capture_output=True, text=True) if result.returncode != 0: raise Exception(f"Conversion failed: {result.stderr}") # Clean up temporary PS file (optional) os.remove(ps_file_path) print(f"Success! PDF saved to: {output_pdf_path}") # Example usage: ps_to_pdf( ps_file_path="./temp_output.ps", output_pdf_dir="./pdf_archives/2024/05", file_name="customer_123_invoice.pdf" )
Option 2: Language-Specific Libraries (C# Example)
If your app is built on .NET, you can use the Ghostscript.NET NuGet package to avoid calling command-line tools directly:
using Ghostscript.NET; using Ghostscript.NET.Rasterizer; using System.IO; public void ConvertAndSavePdf(string psFilePath, string targetPdfPath) { using (var rasterizer = new GhostscriptRasterizer()) { rasterizer.Open(psFilePath); var pdfSettings = new GhostscriptSettings { Device = GhostscriptDevice.PdfWrite, OutputPath = targetPdfPath }; // Convert all pages in the PS file rasterizer.ProcessPages(pdfSettings); } // Delete temporary PS file File.Delete(psFilePath); System.Console.WriteLine($"PDF saved successfully to: {targetPdfPath}"); }
Option 3: Skip PostScript Entirely (Direct PDF Generation)
If your app supports it, generating PDFs directly is more efficient than creating PS first and converting. Here are some tools for common languages:
- Python: Use
ReportLaborPyPDF2to build PDFs from scratch - Java: Use
Apache PDFBoxoriTextfor native PDF generation - Desktop Apps: Frameworks like Qt or WPF have built-in APIs to export UI content directly to PDF
This eliminates the conversion step entirely, reducing overhead and potential errors.
- Local Storage: Organize PDFs into folders by date, customer ID, or document type (e.g.,
./pdf_archives/2024/05/customer_456/) - Network Storage: Save to an SMB shared folder for team-wide access
- Cloud Storage: Use services like AWS S3 or Azure Blob, and set up lifecycle rules to archive old files automatically for cost savings
- Ghostscript Compatibility: Stick to stable versions (9.55.0 or newer) to avoid issues with newer PostScript syntax
- Permissions: Ensure your automation script has read/write access to the storage location
- Error Handling: Add logging to track failures, and keep temporary PS files if conversion fails for debugging purposes
内容的提问来源于stack exchange,提问作者Inthiyan




