def tilted_span(page, wdir, span, font): """Output a non-horizontal span.""" cos, sin = wdir # writing direction from the line matrix = fitz.Matrix(cos, -sin, sin, cos, 0, 0) # corresp. matrix text = span["text"] # text to write bbox = fitz.Rect(span["bbox"]) fontsize = span["size"] # adjust fontsize tl = font.text_length(text, fontsize) # text length with new font m = max(bbox.width, bbox.height) # must not exceed max bbox dimension if tl > m: fontsize *= m / tl # otherwise adjust opa = 0.1 if fontsize > 100 else 1 # fake opacity for large fontsizes tw = fitz.TextWriter(page.rect, opacity=opa, color=fitz.sRGB_to_pdf(span["color"])) origin = fitz.Point(span["origin"]) if sin > 0: # clockwise rotation origin.y = bbox.y0 tw.append(origin, text, font=font, fontsize=fontsize) tw.writeText(page, morph=(origin, matrix))
def test_rgbcodes(): sRGB = 0xFFFFFF assert fitz.sRGB_to_pdf(sRGB) == (1, 1, 1) assert fitz.sRGB_to_rgb(sRGB) == (255, 255, 255)
if color in textwriters.keys(): # already have a textwriter? tw = textwriters[color] # re-use it else: # make new tw = fitz.TextWriter(page.rect) # make text writer textwriters[color] = tw # store it for later use try: tw.append( span["origin"], text, font=font, fontsize=resize(span, font), # use adjusted fontsize wmode=wmode, markup_dir=markup_dir, bidi_level=bidi_level, ) except: print("page %i exception:" % page.number, text) # now write all text stored in the list of text writers for color in textwriters.keys(): # output the stored text per color tw = textwriters[color] outcolor = fitz.sRGB_to_pdf(color) # recover (r,g,b) tw.writeText(page, color=outcolor) clean_fontnames(page) t1 = time.perf_counter() print("End of phase 2, %g seconds" % round(t1 - t0_2, 2)) print("Total duration %g seconds" % round(t1 - t0, 2)) indoc.save(indoc.name.replace(".pdf", "-new.pdf"), garbage=4, deflate=True)
if color in textwriters.keys(): # already have a textwriter? tw = textwriters[color] # re-use it else: # make new tw = fitz.TextWriter(page.rect) # make text writer textwriters[color] = tw # store it for later use try: tw.append( span["origin"], text, font=font, fontsize=resize(span, font), # use adjusted fontsize wmode=wmode, markup_dir=markup_dir, bidi_level=bidi_level, ) except: print("page %i exception:" % page.number, text) for color in textwriters.keys(): # output the stored text per color tw = textwriters[color] outcolor = fitz.sRGB_to_pdf( color) # recover (r,g,b) for given sRGB value tw.writeText(page, color=outcolor) clean_fontnames(page) t1 = time.perf_counter() print("End of phase 2, %g seconds" % round(t1 - t0_2, 2)) print("Total duration %g seconds" % round(t1 - t0, 2)) indoc.save(indoc.name.replace(".pdf", "-new.pdf"), garbage=4, deflate=True)