Come stampare su carta da lettere virtuale che esiste come PDF?

2

Come stampare su carta da lettera virtuale che esiste come PDF?

Novità nel mondo Mac OS X e con i MAC. Dal mondo di Windows ho un foglio di carta virtuale con il mio ad es. logo, intestazioni, piè di pagina esistenti come file PDF.

Avrei bisogno di essere in grado di stampare universalmente su questo PDF esistente, come se fosse ad es. fisicamente da una tipografia e inserito nel mio vero vassoio per stampanti fisiche.

Dopo essermi guardati intorno nel mondo Apple e MAC, mi manca un modo per usare quel "save pdf" o generare un file PDF che è incorporato nel sistema operativo OS X stesso, ma pre-unire e mixare con il mio vettore / pixel della mia carta da lettera virtuale PDF fornita da me risultante in un buon documento ufficiale es per casi aziendali e cose del genere.

Ho letto su OS X automator e anche su pdftk e tutti, e su Windows è davvero semplice, ad esempio per mezzo di una stampante virtuale.

Ma sulla piattaforma Apple, sembra che non ci sia proprio modo di mettere uno sfondo (la mia carta da lettera virtuale proveniente dal mio PDF) correttamente sotto qualsiasi cosa vorrei stampare, come Apple o qualsiasi applicazione sembra mettere bianco pixel (anziché trasparenza) quando generano tramite il proprio OS X integrato per generare quel PDF.

Cosa mi manca qui? E se volessi ad esempio stampare su un foglio blu o un foglio verde come esempi più semplici di questo caso d'uso? Il sistema Apple o qualsiasi app (lication) su di esso, sembra generare sempre una carta virtuale non trasparente e con pixel bianchi, in cui la mia carta letterale virtuale non può competere e non può trasparire.

Anche tramite l'automator ho trovato solo dei modi per stampare sul PDF salvato (questo va bene per i timbri che dicono cose come esemplare, esempio o bozza e simili cose) e la stampa sotto (sotto) del documento reale sarebbe gentile praticamente impossibile a causa di quel pixel / carta bianco opaco generato del sistema OS X stesso.

Inoltre, l'automatore consente di utilizzare solo immagini / file pixel come timbro ontop / in basso e la mia carta da lettera viene già fornita in formato PDF /.

Non c'è davvero alcun concetto sull'attuale MAC OS X da mixare durante il modo integrato di generare PDF con il mio documento / PDF predefinito? Oppure non esiste un software per driver di stampante virtuale che faccia questo a suo modo sulla piattaforma mac?

Qualunque prodotto esistente per la piattaforma MAC OS X che potrei comprare? Grazie in anticipo.

    
posta amacnewbie 18.01.2016 - 19:24
fonte

1 risposta

0

Il seguente script python unirà un PDF "modello" sulle pagine di qualsiasi file PDF creato nella finestra di dialogo Stampa. Sarà necessario fornire il percorso file al modello PDF nello script, quindi salvarlo nella libreria dell'utente, all'interno di una cartella denominata "Servizi PDF", ad es. %codice%. (Potrebbe essere necessario creare questo, se non già lì.)

Lo script può quindi essere chiamato dal pulsante PDF della finestra di dialogo di stampa.

#!/usr/bin/python
# -*- coding: UTF-8 -*-
#
# Merge v. 0.1
# Merges two PDFs 

import sys
import os
import Quartz as Quartz
from Foundation import NSURL, kCFAllocatorDefault
from AppKit import NSSavePanel, NSApp

# OPTIONS
watermark = os.path.expanduser("~/Desktop/myTemplate.pdf")
destination = os.path.expanduser("~/Desktop") # Default destination
suffix = " wm.pdf" # Use ".pdf" if no actual suffix required.

# FUNCTIONS

def save_dialog(directory, filename):
    panel = NSSavePanel.savePanel()
    panel.setTitle_("Save PDF booklet")
    myUrl = NSURL.fileURLWithPath_isDirectory_(directory, True)
    panel.setDirectoryURL_(myUrl)
    panel.setNameFieldStringValue_(filename)
    NSApp.activateIgnoringOtherApps_(True)
    ret_value = panel.runModal()
    if ret_value:
        return panel.filename()
    else:
        return ''

# Loads in PDF document
def createPDFDocumentWithPath(path):
    return Quartz.CGPDFDocumentCreateWithURL(Quartz.CFURLCreateFromFileSystemRepresentation(kCFAllocatorDefault, path, len(path), False))

# Creates a Context for drawing
def createOutputContextWithPath(path, dictarray):
    return Quartz.CGPDFContextCreateWithURL(Quartz.CFURLCreateFromFileSystemRepresentation(kCFAllocatorDefault, path, len(path), False), None, dictarray)

# Gets DocInfo from input file to pass to output.
# PyObjC returns Keywords in an NSArray; they must be tupled.
def getDocInfo(file):
    file = file.decode('utf-8')
    pdfURL = NSURL.fileURLWithPath_(file)
    pdfDoc = Quartz.PDFDocument.alloc().initWithURL_(pdfURL)
    if pdfDoc:
        metadata = pdfDoc.documentAttributes()
        if "Keywords" in metadata:
            keys = metadata["Keywords"]
            mutableMetadata = metadata.mutableCopy()
            mutableMetadata["Keywords"] = tuple(keys)
            return mutableMetadata
        else:
            return metadata

def main(argv):
    (title, options, pathToFile) = argv[:]
    shortName = os.path.splitext(title)[0]
    # If you want to save to a consistent location, use:
    # writeFilename = os.path.join(destination, shortName + suffix)
    writeFilename = save_dialog(destination, shortName + suffix)
    writeFilename = writeFilename.encode('utf-8')
    shortName = os.path.splitext(pathToFile)[0]
    metaDict = getDocInfo(pathToFile)
    writeContext = createOutputContextWithPath(writeFilename, metaDict)
    readPDF = createPDFDocumentWithPath(pathToFile)
    mergePDF = createPDFDocumentWithPath(watermark)

    if writeContext != None and readPDF != None:
        numPages = Quartz.CGPDFDocumentGetNumberOfPages(readPDF)
        for pageNum in xrange(1, numPages + 1): 
            page = Quartz.CGPDFDocumentGetPage(readPDF, pageNum)
            mergepage = Quartz.CGPDFDocumentGetPage(mergePDF, 1)
            if page:
                mediaBox = Quartz.CGPDFPageGetBoxRect(page, Quartz.kCGPDFMediaBox)
                if Quartz.CGRectIsEmpty(mediaBox):
                    mediaBox = None         
                Quartz.CGContextBeginPage(writeContext, mediaBox)   
                Quartz.CGContextSetBlendMode(writeContext, Quartz.kCGBlendModeOverlay)
                Quartz.CGContextDrawPDFPage(writeContext, page)
                Quartz.CGContextDrawPDFPage(writeContext, mergepage)
                Quartz.CGContextEndPage(writeContext)
        Quartz.CGPDFContextClose(writeContext)
        del writeContext

    else:
        print "A valid input file and output file must be supplied."
        sys.exit(1)

if __name__ == "__main__":
    main(sys.argv[1:])

Attualmente, questo usa la prima pagina del file PDF del modello e la mette su tutte le pagine del PDF di output.

    
risposta data 22.01.2019 - 13:18
fonte

Leggi altre domande sui tag