Ich habe mich gefragt, wie die Diff-Informationen visualisiert wurden. Ich möchte endlich die farbigen Differenzinformationen im PDF-Format in eine vernünftige Form bringen.
Als ich es auf verschiedene Arten nachgeschlagen habe, habe ich mich gefragt, ob python-docx verwendet und ausgewertet werden kann, und ich habe einige Ergebnisse erhalten. Hier ist ein Memorandum. Ich werde es in zusammenfassen. Ich habe auch über MarkDown nachgedacht, aber die Disposition eines schlechten Ingenieurs, dass das detaillierte Layout und Erscheinungsbild mit der Word-GUI korrigiert werden kann, wenn es sich um eine Methode zum Generieren von Doxx handelt, hat mich dazu veranlasst, diese Methode zu wählen (bitteres Lächeln). Wenn Word erstellt werden kann, kann PDF erstellt werden.
Ich hoffe, es ist hilfreich für diejenigen, die eine Word-Vorlage basierend auf den Ergebnissen verschiedener Analysen mit Python erstellen möchten.
Dieses Mal haben wir die folgenden Funktionen bestätigt.
Ursprünglich wäre es reibungslos, wenn es mit Python of Windows durchgeführt würde, aber dieses Mal haben wir aufgrund verschiedener Umstände den Vorgang in der folgenden Umgebung bestätigt. Nein, wie bei diff wollte ich die Daten verarbeiten, die auf cygwin durcheinander gebracht wurden, also wurde es diese Umgebung.
Überprüfen Sie bei Verwendung von Cygwin den Zeichencode aller Python-Dateien im UTF-8-Format und die Zeilenumbrüche nur im Format \ n.
Bei ** MS-DOS-Eingabeaufforderung ** lautet der Zeilenumbruch \ r \ n und der Zeichencode SJIS. Auch in diesem Kapitel
# -*- coding: utf-8 -*-
Eine bestimmte Beschreibung
# -*- coding: shift-jis -*-
Wenn ja, sollte es cool sein.
Python ist bereits enthalten.
Die Installation wird hier beschrieben [https://python-docx.readthedocs.io/en/latest/user/install.html#install]. Die Bedingungen sind wie folgt.
Normalerweise können Sie dies mit pip install python-docx tun. Die MS-DOS-Eingabeaufforderungsversion verlief auch in meiner Umgebung reibungslos.
Obwohl dies die oben genannte Bedingung ist, müssen zunächst die folgenden Bibliotheken in Cygwin installiert werden. Wenn diese nicht enthalten sind, wird eine Fehlermeldung angezeigt, da kein Header vorhanden ist. Geben Sie sie daher ein. ** Kann nicht als Standard enthalten sein. ** **.
Wenn Sie Python in Windows und Cygwin wie ich haben, müssen Sie außerdem vorsichtig sein. Wenn Sie eine Pip-Installation durchführen, wird dies in Windows abhängig von der Pfadeinstellung usw. geschehen. Also habe ich es mit der folgenden Methode installiert.
Klicken Sie hier, um Cygwin einzurichten (http://qiita.com/GDaigo/items/a80003684fc6ab7505fd#%E3%82%BB%E3%83%83%E3%83%88%E3%82%A2%E3%83] % 83% E3% 83% 97) kann ebenfalls hilfreich sein
easy_install-2.7 python-docx
Unten finden Sie eine Beschreibung der Hauptfamilie.
https://python-docx.readthedocs.io/en/latest/index.html
Das Tutorial sollte leicht verständlich sein. Es ist jedoch ziemlich schwierig zu finden, was Sie tun möchten. In meinem Fall hatte ich große Probleme mit dem Charaktermodifikationssystem, aber die Beziehung wurde unten zusammengefasst.
http://python-docx.readthedocs.io/en/latest/user/text.html
Es ist mühsam, die Spezifikationen der Bibliothek im Detail zu erklären, deshalb habe ich versucht, sie im folgenden Code auszudrücken.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# SimpleDocService
# python-Wir bieten einen einfachen Service in Bezug auf dox.
#Nun, es ist der Code, um die docx-Bibliothek zu verstehen.
#
from docx import Document
from docx.shared import RGBColor
from docx.shared import Inches
from docx.shared import Pt
class SimpleDocxService:
def __init__(self):
self.document = Document()
self.latest_run = None
def set_normal_font(self, name, size):
#Schriftarteinstellungen
font = self.document.styles['Normal'].font
font.name = name
font.size = Pt(size)
def add_head(self, text, lv):
#Überschrifteneinstellungen
self.document.add_heading(text, level=lv)
def open_text(self):
#Beginnen Sie mit dem Hinzufügen von Text
self.paragraph = self.document.add_paragraph()
def close_text(self):
#Textaddition abgeschlossen
return #Derzeit keine Bearbeitung
def get_unicode_text(self, text, src_code):
# python-In Unicode konvertieren, damit es von docx verarbeitet werden kann
return unicode(text, src_code)
def adjust_return_code(self, text):
#Wenn Sie die Daten der Textdatei unverändert hinzufügen, tritt ein Zeilenumbruch auf
#Entfernen Sie es, da es ein Ärger sein wird
text = text.replace("\n", "")
text = text.replace("\r", "")
return text
def add_text(self, text):
#Text hinzufügen
self.latest_run = self.paragraph.add_run(text)
def add_text_italic(self, text):
#Text hinzufügen (kursiv)
self.paragraph.add_run(text).italic = True
def add_text_bold(self, text):
#Text hinzufügen (hervorheben)
self.paragraph.add_run(text).bold = True
def add_text_color(self, text, r, g, b):
#Färben Sie die Buchstaben
self.paragraph.add_run(text).font.color.rgb = RGBColor(r, g, b)
def add_picture(self, filename, inch):
#Abbildung einfügen
self.document.add_picture(filename, width=Inches(inch))
def save(self, name):
#Ausgabe als docx-Datei.
self.document.save(name)
SimpleDocxService ist eine Klasse, die APIs verschiedener Funktionen sammelt, die dieses Mal ausgewertet werden. Es bietet die folgenden Funktionen.
API | Bewegung |
---|---|
set_normal_font(name, size) | Legen Sie die Standardtextschrift fest. Name ist der Name und Größe zu Größe |
add_head(text, lv) | Überschriften erstellen. Text ist der Überschriftenname. lv ist eben(0=Titel, 1=Überschrift 1,...) |
open_text() | Textbereich öffnen (*) |
close_text() | Textbereich schließen (*) |
get_unicode_text(text, src_code) | src_Erzeugt und gibt eine Unicode-Zeichenfolge aus dem durch den Code angegebenen Zeichencode zurück |
adjust_return_code(text) | Erzeugt Text und gibt ihn zurück, wobei die Zeilenumbrüche gelöscht werden |
add_text(text) | Schreiben Sie Textdaten in ein Word-Dokument |
add_text_italic(text) | Schreiben Sie Textdaten in ein Word-Dokument und machen Sie die Schrift kursiv |
add_text_bold(text) | Schreiben Sie Textdaten in ein Word-Dokument in Fettdruck |
add_text_color(text, r, g, b) | Text Schreiben Sie Daten in ein Word-Dokument. Geben Sie die Farbe mit rgb an. Beispiel: r=255, g=0, b=Rot bei 0 |
add_picture(filename, inch) | Fügen Sie die durch den Dateinamen angegebenen Bilddaten ein. Zoll ist die horizontale Zollgröße |
save(name) | Speichern Sie als Word-Datei mit dem durch den Namen angegebenen Dateinamen |
Einige Ergänzungen.
Dies hängt mit dem Verhalten von Python-Docx zusammen, daher werde ich es mit Code ergänzen. Der Code, der den Text tatsächlich schreibt, lautet wie folgt. Dies ist der Code aus Honke.
p = document.add_paragraph('A plain paragraph having some ')
p.add_run('bold').bold = True
p.add_run(' and some ')
p.add_run('italic.').italic = True
Sie können auch sehen, wie es in [Home] angezeigt wird (https://python-docx.readthedocs.io/en/latest/index.html). Auf diese Weise können Sie den Absatz abrufen und Text hinzufügen. Es scheint, dass die Textänderung auch zum Zeitpunkt dieses add_run durchgeführt werden kann. Möglicherweise betrifft dies auch die Struktur der dox-Datei.
Open_text wird also verwendet, um einen neuen Absatz aufzunehmen. Für python-docx ist es nicht erforderlich, aber die Idee ist, close_text zu verwenden, um die Reihe von Beschreibungen zu vervollständigen. aus diesem Grund, Der Text, der die SimpleDoxService-Klasse verwendet, wird wie folgt beschrieben.
docx = SimpleDoxService()
docx.open_text()
docx.add_text("This is a my best book.\n")
docx.add_text("Do you know this?")
docx.close_text()
Der Grund, warum ich das tue, ist die Betrachtung der Beziehung zur Figur. Wenn Sie ein Bild einfügen möchten, verwenden Sie add_picture, wie Sie im obigen Code sehen können. Angenommen, Sie schreiben zu diesem Zeitpunkt Folgendes (Code, der Python-Docx direkt verwendet, ohne die SimpleDocxService-Klasse zu verwenden).
p = document.add_paragraph('A plain paragraph having some ')
p.add_run("text1\n")
document.add_picture("sample.png ", width=Inches(1.25))
p.add_run("text2\n")
In diesem Fall ist es in gewissem Sinne natürlich,
text1
<<sample.PNG-Diagramm>>
text2
nicht
text1
text2
<<sample.PNG-Diagramm>>
Es wird. Also wollte ich das im App-Code klarstellen, also habe ich das Konzept von Öffnen und Schließen eingeführt. Dies wird später im Code der Beispiel-App gezeigt, daher hoffe ich, dass Sie auch darauf verweisen können.
Im Fall von Python ist der Zeichencode ziemlich mühsam. Es ist wichtig zu beachten, welchen Zeichencode die Bibliothek verarbeitet. Im Fall von Python-Docx scheint es, dass es von Unicode verarbeitet wird. Im Fall von Japanisch ist es daher erforderlich, es in Unicode zu konvertieren. Es gibt hier verschiedene Konvertierungsmethoden, aber es scheint notwendig zu sein, diese Funktionsmethode get_unicode_text zu verwenden, um sie unicode zu machen (es scheint, dass es nicht SJIS ist, weil es Word ist ...).
Dies ist der Code, den ich durch Ausschneiden und Ausprobieren eingegeben habe. Entschuldigung. Es scheint, dass unnötige Zeilenumbrüche eingefügt werden, wenn Sie den Text so wie er ist mit Zeilenumbrüchen verwenden. Ich habe diese Funktion "adjust_return_code" verwendet, um dies zu verhindern.
Im nächsten Abschnitt erstellen wir tatsächlich eine Word-Datei mit dem Code dieser SimpleDocxService-Klasse.
Erstellen Sie dieses Mal eine WORD-Datei mit der folgenden Konfiguration als Beispiel.
Unten finden Sie das in der Probe verwendete Material. Ich bin wieder ein professioneller Student. ..
Zunächst ist das Bild unter dem Titel eine Datei namens ** report_top.png **, die so aussieht.
Als nächstes lautet die Textdatei ** sample.txt **, was so aussieht. Nun, es ist ein Auszug aus Mein Blog ...
Ich denke, dass die grundlegende Rolle eines Managers darin besteht, mehrere Personen zu bewegen und Ergebnisse zu erzielen.
Daher ist es schwierig, die emotionalen und mentalen Probleme der Menschen zu ignorieren. Ich denke, das ist ein bisschen anders als die andere Partei zu akzeptieren. Nachdem ich ein solches Problem bis zu einem gewissen Grad in Betracht gezogen hatte, wagte ich es, es zu ignorieren.
Ein anderes Bild ist eine Datei namens ** sample_pic.png **, die so aussieht.
Das unten angegebene Beispiel wurde damit erstellt. Natürlich müssen Bild und Text nicht so sein. Beachten Sie jedoch, dass der Text in Japanisch SJIS und in Windows \ r \ n für Zeilenumbrüche lautet.
Übrigens wird das Material eines professionellen Studenten aus dem Folgenden erhalten, und die Größe und die Zeicheneinfügung werden verarbeitet. http://pronama.azurewebsites.net/pronama/
Unten finden Sie Beispielcode, der die SimpleDocxService-Klasse zum Generieren von Wörtern verwendet.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
from docx_simple_service import SimpleDocxService
if __name__ == "__main__":
docx = SimpleDocxService()
#Schriftarteinstellungen
docx.set_normal_font("Courier New", 9)
#Titelanzeige
docx.add_head(u"Überschrift", 0)
#Abbildung einfügen
docx.add_picture("report_top.png ", 3.0)
#Anzeige des Phrasentitels
docx.add_head(u"Erstes Thema", 1)
# shift-Fügen Sie die jis-Textdatei in den doxx-Text ein
f = open("sample.txt")
text = f.read()
f.close()
docx.open_text()
docx.add_text("\n")
text = docx.get_unicode_text(text, 'shift-jis')
text = docx.adjust_return_code(text)
docx.add_text(text)
docx.close_text()
#Abbildung einfügen
docx.add_picture("sample_pic.png ", 5.0)
#Generieren Sie Text in Code und fügen Sie ihn in dox ein.
#Ein Beispiel für eine Änderung ist auch hier.
docx.open_text()
docx.add_text("\nThis is a my best book.")
docx.add_text("\nThis is ")
docx.add_text_bold("a my best")
docx.add_text(" book.")
docx.add_text("\nThis is ")
docx.add_text_italic("a my best")
docx.add_text(" book.")
docx.add_text_color("\nThis is a my best book.", 0xff, 0x00, 0x00)
docx.close_text()
#Nächster Satz
docx.add_head(u"Zweites Thema", 1)
#Generieren Sie Text in Code und fügen Sie ihn in dox ein.
docx.open_text()
docx.add_text(u"\n Ja, das ist es.")
docx.close_text()
#Es ist eine Rettung.
docx.save("test.docx")
print "complete."
Sie werden einen solchen Dox haben.
Ich denke, es hat die oben beschriebene Struktur.
Für Python-Docx ist der Code selbst nicht so schwierig, wenn Sie erst einmal wissen, wie man ihn schreibt. Sie können dies verstehen, indem Sie den obigen Beispielcode mit dem Code der SimpleDocxService-Klasse vergleichen. Wenn es also innerhalb dieses Bereichs liegt, können Sie meiner Meinung nach verschiedene Dinge tun, indem Sie den hier veröffentlichten Code ändern.
Ich habe es unten benutzt. Vielen Dank für die Bereitstellung der wunderbaren Software.
das ist alles.
Recommended Posts