예제 #1
0
    def make_watermark_pdf(self, number, attachment):
        '''
        给PDF类型的文件打水印
        :param number:
        :param attachment:
        :return:
        '''
        print u'准备给PDF打水印----看以下输出的日志是否正确-通用模块'
        print attachment
        print number

        b = self._filestore()
        a = b + '/' + attachment[0]['store_fname'].split('/')[0] + "/"
        old_file_name = attachment[0]['store_fname'].split('/')[1]
        c = canvas.Canvas(a + u"shuiyin.pdf")
        c.setFont("Courier", 35)
        # 设置水印文字的灰度
        c.setFillGray(0.4, 0.4)
        # 设置水印文件,并将文字倾斜45度角
        c.saveState()
        c.rotate(45)  # 旋转角度

        c.translate(500, 100)  # 重设中心点
        c.drawCentredString(100, 270, number)

        # c.translate(200, 350)  # 重设中心点
        c.drawCentredString(0, 0, number)  # 绘制一个以坐标为中心的字符串
        #
        # c.translate(400, 50)  # 重设中心点
        c.drawCentredString(-100, -300, number)
        c.restoreState()
        c.save()
        output = PdfFileWriter()
        aa = file(b + '/' + attachment[0]['store_fname'], 'rb')
        input1 = PdfFileReader(aa)
        bb = file(a + u'shuiyin.pdf', 'rb')
        water = PdfFileReader(bb)
        # 获取pdf文件的页数
        pageNum = input1.getNumPages()
        # 给每一页打水印
        for i in range(pageNum):
            page = input1.getPage(i)
            page.mergePage(water.getPage(0))
            output.addPage(page)
        # 最后输出文件
        outStream = file(a + u'shuchuwenjian.pdf', 'wb')
        output.write(outStream)
        aa.close()
        bb.close()
        outStream.close()
        os.chdir(a)
        os.remove("shuiyin.pdf")  # 删除水印文件
        os.remove(old_file_name)  # 删除上次源文件
        os.rename('shuchuwenjian.pdf', old_file_name)  # 添加水印的文件改名
    def _merge_pdf(self, documents, both_sides=False):
        print "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
        print "merge_pdf %s" % (both_sides)
        print "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
        """Merge PDF files into one.
 
        :param documents: list of path of pdf files
        :returns: path of the merged pdf
        """
        blankpdfstr = '''JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0ZpbHRlci9GbGF0ZURl
                        Y29kZT4+CnN0cmVhbQp4nDPQM1Qo5ypUMFAwALJMLU31jBQsTAz1LBSKUrnCtRTyuAIVAIcdB3IK
                        ZW5kc3RyZWFtCmVuZG9iagoKMyAwIG9iago0MgplbmRvYmoKCjUgMCBvYmoKPDwKPj4KZW5kb2Jq
                        Cgo2IDAgb2JqCjw8L0ZvbnQgNSAwIFIKL1Byb2NTZXRbL1BERi9UZXh0XQo+PgplbmRvYmoKCjEg
                        MCBvYmoKPDwvVHlwZS9QYWdlL1BhcmVudCA0IDAgUi9SZXNvdXJjZXMgNiAwIFIvTWVkaWFCb3hb
                        MCAwIDU5NSA4NDJdL0dyb3VwPDwvUy9UcmFuc3BhcmVuY3kvQ1MvRGV2aWNlUkdCL0kgdHJ1ZT4+
                        L0NvbnRlbnRzIDIgMCBSPj4KZW5kb2JqCgo0IDAgb2JqCjw8L1R5cGUvUGFnZXMKL1Jlc291cmNl
                        cyA2IDAgUgovTWVkaWFCb3hbIDAgMCA1OTUgODQyIF0KL0tpZHNbIDEgMCBSIF0KL0NvdW50IDE+
                        PgplbmRvYmoKCjcgMCBvYmoKPDwvVHlwZS9DYXRhbG9nL1BhZ2VzIDQgMCBSCi9PcGVuQWN0aW9u
                        WzEgMCBSIC9YWVogbnVsbCBudWxsIDBdCi9MYW5nKGZyLUZSKQo+PgplbmRvYmoKCjggMCBvYmoK
                        PDwvQ3JlYXRvcjxGRUZGMDA1NzAwNzIwMDY5MDA3NDAwNjUwMDcyPgovUHJvZHVjZXI8RkVGRjAw
                        NEMwMDY5MDA2MjAwNzIwMDY1MDA0RjAwNjYwMDY2MDA2OTAwNjMwMDY1MDAyMDAwMzMwMDJFMDAz
                        NT4KL0NyZWF0aW9uRGF0ZShEOjIwMTIxMTAzMTQ0NzEwKzAxJzAwJyk+PgplbmRvYmoKCnhyZWYK
                        MCA5CjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAwMDAwMDIyNiAwMDAwMCBuIAowMDAwMDAwMDE5IDAw
                        MDAwIG4gCjAwMDAwMDAxMzIgMDAwMDAgbiAKMDAwMDAwMDM2OCAwMDAwMCBuIAowMDAwMDAwMTUx
                        IDAwMDAwIG4gCjAwMDAwMDAxNzMgMDAwMDAgbiAKMDAwMDAwMDQ2NiAwMDAwMCBuIAowMDAwMDAw
                        NTYyIDAwMDAwIG4gCnRyYWlsZXIKPDwvU2l6ZSA5L1Jvb3QgNyAwIFIKL0luZm8gOCAwIFIKL0lE
                        IFsgPEYyMjBCNDlBNjRDOEEzRDY3QUFBQzNCODAwNkI5RkRDPgo8RjIyMEI0OUE2NEM4QTNENjdB
                        QUFDM0I4MDA2QjlGREM+IF0KL0RvY0NoZWNrc3VtIC83NzUwQTAyMEVFNEUwQkU5NjVGMzBDNTND
                        MkRGNUFGNgo+PgpzdGFydHhyZWYKNzM2CiUlRU9GCg=='''

        writer = PdfFileWriter()
        blank_page = PdfFileReader(
            StringIO.StringIO(blankpdfstr.decode("base64"))).pages[0]
        streams = [
        ]  # We have to close the streams *after* PdfFilWriter's call to write()
        for document in documents:
            pdfreport = file(document, 'rb')
            streams.append(pdfreport)
            reader = PdfFileReader(pdfreport)
            for page in range(0, reader.getNumPages()):
                writer.addPage(reader.getPage(page))
            if reader.getNumPages() % 2 and both_sides:
                writer.addPage(blank_page)

        merged_file_fd, merged_file_path = tempfile.mkstemp(
            suffix='.html', prefix='report.merged.tmp.')
        with closing(os.fdopen(merged_file_fd, 'w')) as merged_file:
            writer.write(merged_file)

        for stream in streams:
            stream.close()

        return merged_file_path
예제 #3
0
 def create(self):
     """ Create PDF """
     print "[+] The password is " + self.password
     writer = PdfFileWriter()
     input_pdf = PdfFileReader(file(self.filename, "rb"))
     for page in range(0, input_pdf.getNumPages()):
         writer.addPage(input_pdf.getPage(page))
     output_stream = file(self.outputname, "wb")
     writer.encrypt(self.password, use_128bit=True)  #max security by lib
     writer.write(output_stream)
     output_stream.close()
     print "[+] Done"
예제 #4
0
def make_book(files, oname):
    from pyPdf import PdfFileWriter, PdfFileReader
    print 'Generating PDF booklet.'
    output = PdfFileWriter()
    for x in files:
        print x
        input1 = PdfFileReader(file(x, 'rb'))
        output.addPage(input1.getPage(0))

    outputStream = file(oname, 'wb')
    output.write(outputStream)
    outputStream.close()
예제 #5
0
def cut_pdf(ifile, ofile, leftsize, rightsize):
    pdf = PdfFileReader(file(ifile, 'rb'))
    out = PdfFileWriter()

    for page in pdf.pages:
        page.mediaBox.upperRight = rightsize
        page.mediaBox.lowerLeft = leftsize
        out.addPage(page)

    ous = file(ofile, 'wb')
    out.write(ous)
    ous.close()
예제 #6
0
def write_pdf(pdf, name, suffix, start, end, metadata=None):
    if metadata == None:
        title = _('Unknown')
        author = _('Unknown')
    else:
        title = metadata.title
        author = authors_to_string(metadata.authors)

    out_pdf = PdfFileWriter(title=title, author=author)
    for page_num in range(start, end + 1):
        out_pdf.addPage(pdf.getPage(page_num))
    with open('%s%s.pdf' % (name, suffix), 'wb') as out_file:
        out_pdf.write(out_file)
def merge_pdf(url_list):
    # Download each PDF and merge them into one giant PDF, post this giant PDF to anonfiles.com, add URL to scraperwiki database
    output = PdfFileWriter()
    for url in url_list:

        if url[0] == "http://www.cota.com/assets/Riding-Cota/Schedules/Current/083.pdf":
             url[0] = "http://www.cota.com/assets/Riding-Cota/Schedules/Current/83.pdf"
             url[1] = "83.pdf"
        if url[0] == "http://www.cota.com/assets/Riding-Cota/Schedules/Current/039.pdf":
             url[0] = "http://www.cota.com/assets/Riding-Cota/Schedules/Current/39.pdf"
             url[1] = "39.pdf"
        if url[0] == "http://www.cota.com/assets/Riding-Cota/Schedules/Current/021.pdf":
             url[0] = "http://www.cota.com/assets/Riding-Cota/Schedules/Current/21.pdf"
             url[1] = "21.pdf"
        if url[0] == "http://www.cota.com/assets/Riding-Cota/Schedules/Current/016S.pdf":
             url[0] = "http://www.cota.com/assets/Riding-Cota/Schedules/Current/16S.pdf"
             url[1] = "16S.pdf"
        if url[0] == "http://www.cota.com/assets/Riding-Cota/Schedules/Current/015.pdf":
             url[0] = "http://www.cota.com/assets/Riding-Cota/Schedules/Current/15.pdf"
             url[1] = "15.pdf"

        pdf_file = os.system("wget %s" % url[0])
        input1 = PdfFileReader(file('/tmp/%s' % url[1], "rb"))
        numPages  = input1.getNumPages()
        print "number of pages = %s" % (numPages)
        page1 = input1.getPage(0)
        page2 = input1.getPage(1)
        output.addPage(page1)
        output.addPage(page2)

        if numPages == 3:
            page3 = input1.getPage(2)
            output.addPage(page3)

    final_page_count = output.getNumPages()
    print "Number of Pages in Final = %s" % (final_page_count)

    outputStream = file("/tmp/bus.pdf", "wb")
    output.write(outputStream)
    outputStream.close()

    reply = os.system('curl -kF "[email protected];filename=bus.pdf" https://anonfiles.com/api/hotlink -o "reply.txt"')

    with open('reply.txt', 'r') as f:
        read_data = f.read()

    data_dict = {
                   'Title':'Link to COTA Bus Schedule',
                   'URL':read_data,
                }
    scraperwiki.sqlite.save(unique_keys=['Title', 'URL'], data=data_dict)
예제 #8
0
def render_multipage(drawing, opts, outbuf=None):
    if opts.pagesize in name2size:
        pagesize = name2size[opts.pagesize]
    else:
        pagesize = opts.pagesize or letter
    border = opts.border or 1 * cm
    landscape = opts.landscape or False
    pgwidth, pgheight = pagesize if not landscape \
                        else (pagesize[1], pagesize[0])
    #print "drawing width, height:", drawing.width/inch, drawing.height/inch
    if drawing.width > pgwidth - 2 * border:
        scalefact = (pgwidth - 2 * border) / float(drawing.width)
        drawing.scale(scalefact, scalefact)
    else:
        scalefact = 1.0
    #border *= scalefact
    dwidth = drawing.width * scalefact
    dheight = drawing.height * scalefact

    output = PdfFileWriter()
    if not outbuf:
        outfile = file(opts.outfile, "wb")
    else:
        outfile = outbuf

    buf = StringIO()
    renderPDF.drawToFile(drawing, buf)
    lower = dheight
    pgnum = 0
    while lower >= 0:
        if pgnum == 0:
            delta = 0.0
        else:
            delta = 2 * border * pgnum
        buf.seek(0)
        tmp = PdfFileReader(buf)
        page = tmp.getPage(0)
        box = page.mediaBox
        uly = float(box.getUpperLeft_y()) * scalefact
        upper = uly + border + delta - pgnum * pgheight
        #lower = uly+border+delta-(pgnum+1)*pgheight
        lower = upper - pgheight
        box.setUpperRight((pgwidth - border, upper))
        box.setUpperLeft((-border, upper))
        box.setLowerRight((pgwidth - border, lower))
        box.setLowerLeft((-border, lower))
        output.addPage(page)
        pgnum += 1

    output.write(outfile)
    return pgnum, scalefact
예제 #9
0
def ayir(dosya_yolu , sayfa1):
        """pdf dosyasının başından sayfa1'e,
           sayfa1'den sonuna kadar iki tabe pdf dosyası oluşturur
        """
        try:
                kaynak = PdfFileReader(open(dosya_yolu, "rb"))
                islem0 = PdfFileWriter()
                islem1 = PdfFileWriter()
                hedef0 = open("data0.pdf", "wb")
                hedef1 = open("data1.pdf", "wb")
                if sayfa1<0:
                        sayfa1 *=(-1)
                for i in range(int(sayfa1)):
                        islem0.addPage(kaynak.getPage(i))
                for i in range(int(sayfa1),kaynak.getNumPages()):
                        islem1.addPage(kaynak.getPage(i))
                islem0.write(hedef0)
                islem1.write(hedef1)
                hedef0.close()
                hedef1.close()
                print "»» pdf oluşturuldu"
        except:
                print "»» pdf oluşturulamadı"
예제 #10
0
def generate_inspection_report(request, lot_number):
    report = Report.objects.get(lot_number=lot_number)

    outputPDF = PdfFileWriter()

    packet = StringIO()
    # create a new PDF with Reportlab
    p = canvas.Canvas(packet, pagesize=letter)
    p.drawString(25 * mm, 212 * mm, report.origin_po)
    if report.origin_wo:
        p.drawString(45 * mm, 210 * mm, "WO# %s" % report.origin_wo)
    p.drawCentredString(95 * mm, 212 * mm, str(report.created_at.date()))
    p.drawCentredString(165 * mm, 216 * mm, report.vendor.name)

    p.setFont("Helvetica", 9)
    if report.heat_number:
        p.drawString(155 * mm, 207 * mm, "HEAT # %s" % report.heat_number)
    if report.mfg_lot_number:
        p.drawString(155 * mm, 205 * mm,
                     "MFG Lot # %s" % report.mfg_lot_number)
    p.drawString(
        155 * mm, 203 * mm,
        "%s Lot # %s" % (settings.PDF_COMPANY_SHORT_NAME, report.lot_number))
    p.setFont("Helvetica", 9)
    if report.raw_material is False:
        p.drawCentredString(43 * mm, 95 * mm, report.part_number.part_number)
    else:
        p.drawCentredString(43 * mm, 176 * mm, report.part_number.part_number)
        p.drawCentredString(45 * mm, 170 * mm,
                            str(report.part_number.specification))
    p.save()

    #move to the beginning of the StringIO buffer
    packet.seek(0)
    new_pdf = PdfFileReader(packet)

    # read your existing PDF
    existing_pdf = PdfFileReader(
        file(settings.PDF_INSPECTION_REPORT_TEMPLATE, "rb"))

    # add the "watermark" (which is the new pdf) on the existing page
    page = existing_pdf.getPage(0)
    page.mergePage(new_pdf.getPage(0))
    outputPDF.addPage(page)

    # finally, write "output" to a real file
    action.send(request.user,
                verb="generated an inspection report",
                target=report)
    return outputPDF