Je me demandais comment les informations de diff étaient visualisées. Je veux enfin rendre les informations de différence de couleur sous une forme raisonnable en pdf.
Quand je l'ai recherché de différentes manières, j'ai pensé que python-docx pouvait être utilisé et évalué, et j'ai obtenu quelques résultats, voici donc un mémorandum. Je vais le résumer dans. J'ai aussi pensé à MarkDown, mais la disposition d'un mauvais ingénieur à ce que la mise en page détaillée et l'apparence puissent être corrigées avec l'interface graphique de Word s'il s'agit d'une méthode de génération de doxx m'a fait choisir cette méthode (sourire amer). Si Word peut être créé, un PDF peut être créé.
J'espère que cela sera utile pour ceux qui souhaitent créer un modèle Word basé sur les résultats de diverses analyses avec Python.
Cette fois, nous avons confirmé les fonctions suivantes.
À l'origine, ce serait fluide si cela était fait avec Python sur Windows, mais cette fois, en raison de diverses circonstances, nous avons confirmé l'opération dans l'environnement suivant. Non, comme avec diff, je voulais traiter les données qui étaient gâchées sur cygwin, c'est donc devenu cet environnement.
Lorsque vous utilisez Cygwin, vérifiez le code de caractère de tous les fichiers python au format UTF-8 et les sauts de ligne au format \ n uniquement.
En outre, pour ** l'invite MS-DOS **, le saut de ligne est \ r \ n et le code de caractère est SJIS. Également dans ce chapitre
# -*- coding: utf-8 -*-
Une certaine description
# -*- coding: shift-jis -*-
Si c'est le cas, ça devrait être cool.
Python est déjà inclus.
L'installation est décrite ici [https://python-docx.readthedocs.io/en/latest/user/install.html#install). Les conditions sont les suivantes.
Habituellement, vous pouvez le faire avec pip install python-docx, peut-être. La version de l'invite MS-DOS s'est également déroulée sans problème dans mon environnement.
Tout d'abord, bien que ce soit la condition ci-dessus, les bibliothèques suivantes doivent être installées dans Cygwin. Si ceux-ci ne sont pas inclus, vous obtiendrez une erreur comme s'il n'y a pas d'en-tête, alors entrez-les. ** Peut ne pas être inclus en standard. ** **
De plus, si vous avez python dans Windows et Cygwin comme moi, vous devez faire attention, et si vous installez, ce sera dans Windows en fonction du paramètre de chemin, etc. Donc, je l'ai installé par la méthode suivante.
Cliquez ici pour configurer Cygwin (http://qiita.com/GDaigo/items/a80003684fc6ab7505fd#%E3%82%BB%E3%83%83%E3%83%88%E3%82%A2%E3%83] % 83% E3% 83% 97) peut également être utile
easy_install-2.7 python-docx
Voici une description de la famille principale.
https://python-docx.readthedocs.io/en/latest/index.html
Le tutoriel doit être facile à comprendre. Cependant, il est assez difficile de trouver ce que vous voulez faire. Dans mon cas, j'ai eu beaucoup de problèmes avec le système de modification de personnage, mais la relation a été résumée ci-dessous.
http://python-docx.readthedocs.io/en/latest/user/text.html
Il est difficile d'expliquer les spécifications de la bibliothèque en détail, j'ai donc essayé de l'exprimer dans le code ci-dessous.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# SimpleDocService
# python-Nous fournissons un service simple lié à la dox.
#Eh bien, c'est le code pour comprendre la bibliothèque docx.
#
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):
#Paramètres de police
font = self.document.styles['Normal'].font
font.name = name
font.size = Pt(size)
def add_head(self, text, lv):
#Paramètres de cap
self.document.add_heading(text, level=lv)
def open_text(self):
#Commencer à ajouter du texte
self.paragraph = self.document.add_paragraph()
def close_text(self):
#Ajout de texte terminé
return #Actuellement aucun traitement
def get_unicode_text(self, text, src_code):
# python-Convertir en Unicode pour qu'il puisse être géré par docx
return unicode(text, src_code)
def adjust_return_code(self, text):
#Si vous ajoutez les données du fichier texte telles quelles, un saut de ligne se produira
#Retirez-le car ce sera un problème
text = text.replace("\n", "")
text = text.replace("\r", "")
return text
def add_text(self, text):
#Ajouter du texte
self.latest_run = self.paragraph.add_run(text)
def add_text_italic(self, text):
#Ajouter du texte (en italique)
self.paragraph.add_run(text).italic = True
def add_text_bold(self, text):
#Ajouter du texte (souligner)
self.paragraph.add_run(text).bold = True
def add_text_color(self, text, r, g, b):
#Colorez les lettres
self.paragraph.add_run(text).font.color.rgb = RGBColor(r, g, b)
def add_picture(self, filename, inch):
#Insérer une figure
self.document.add_picture(filename, width=Inches(inch))
def save(self, name):
#Sortie sous forme de fichier docx.
self.document.save(name)
SimpleDocxService est une classe qui rassemble les API de diverses fonctions évaluées cette fois. Il fournit les fonctions suivantes.
API | mouvement |
---|---|
set_normal_font(name, size) | Définissez la police de texte standard. nom est le nom et la taille à la taille |
add_head(text, lv) | Création de titres. text est le nom du titre. lv est de niveau(0=Titre, 1=Titre 1,...) |
open_text() | Zone de texte ouverte (*) |
close_text() | Fermer la zone de texte (*) |
get_unicode_text(text, src_code) | src_Génère et renvoie une chaîne de caractères Unicode à partir du code de caractère spécifié par code |
adjust_return_code(text) | Génère et renvoie du texte avec les sauts de ligne effacés |
add_text(text) | écrire des données texte dans un document Word |
add_text_italic(text) | Écrire des données de texte dans un document Word, mettre la police en italique |
add_text_bold(text) | Écrire des données textuelles dans un document Word, police en gras |
add_text_color(text, r, g, b) | texte Ecrit des données dans un document Word. Spécifiez la couleur avec rgb. Exemple: r=255, g=0, b=Rouge à 0 |
add_picture(filename, inch) | Insérez les données d'image spécifiées par nom de fichier. pouce est la taille horizontale en pouces |
save(name) | Enregistrer en tant que fichier Word avec le nom de fichier spécifié par nom |
Certains suppléments.
Ceci est lié au comportement de python-docx, je vais donc le compléter avec du code. Le code qui écrit réellement le texte est le suivant. C'est le code extrait de 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
Vous pouvez également voir comment il sera affiché dans Accueil. De cette façon, vous pouvez obtenir le paragraphe et y ajouter du texte. Il semble que la modification de texte puisse également être effectuée lors de cet add_run. Cela implique peut-être aussi la structure du fichier dox.
Ainsi, open_text est utilisé pour prendre un nouveau paragraphe. Ce n'est pas nécessaire pour python-docx, mais l'idée est d'utiliser close_text pour compléter la série de descriptions. pour cette raison, Le texte utilisant la classe SimpleDoxService est décrit comme suit.
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()
La raison pour laquelle je fais cela tient compte de la relation avec la figure. Si vous souhaitez inclure une image, utilisez add_picture comme vous pouvez le voir dans le code ci-dessus. À ce stade, supposons que vous écriviez ce qui suit (code qui utilise directement python-docx sans utiliser la classe SimpleDocxService).
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")
Dans ce cas, c'est naturel dans un sens,
text1
<<sample.diagramme png>>
text2
ne pas
text1
text2
<<sample.diagramme png>>
Il devient. Donc, je voulais clarifier cela dans le code de l'application, alors j'ai mis le concept d'ouverture et de fermeture. Cela sera indiqué plus tard dans le code de l'exemple d'application, j'espère donc que vous pourrez également y faire référence.
Dans le cas de Python, le code des caractères est plutôt gênant. Il est important de noter le code de caractère géré par la bibliothèque. Dans le cas de python-docx, il semble qu'il soit traité par unicode, donc dans le cas du japonais, il est nécessaire de le convertir en unicode. Il existe différentes méthodes de conversion ici, mais il semble qu'il soit nécessaire d'utiliser cette méthode de fonction get_unicode_text pour la rendre unicode (il semble que ce n'est pas SJIS car c'est Word ...).
C'est le code que j'ai mis en coupant et essayant. Il semble que si vous utilisez le texte avec des sauts de ligne tel quel, des sauts de ligne inutiles seront insérés. La façon dont je l'ai fait a été d'utiliser cette fonction Adjust_return_code pour l'empêcher.
Dans la section suivante, nous allons créer un fichier Word en utilisant le code de cette classe SimpleDocxService.
Cette fois, créez un fichier WORD avec la configuration suivante comme exemple.
Vous trouverez ci-dessous le matériau utilisé dans l'échantillon. Je suis à nouveau un étudiant professionnel. ..
Tout d'abord, l'image sous le titre est un fichier appelé ** report_top.png **, qui ressemble à ceci.
Ensuite, le fichier texte est ** sample.txt **, qui ressemble à ceci. Eh bien, c'est un extrait de Mon blog ...
Je pense que le rôle fondamental d'un manager est de déplacer plusieurs personnes et d'obtenir des résultats.
Par conséquent, il est difficile d'ignorer les problèmes émotionnels et mentaux des gens. Je pense que c'est un peu différent d'accepter l'autre partie. Après avoir examiné un tel problème dans une certaine mesure, j'ai osé l'ignorer.
Une autre image est un fichier appelé ** sample_pic.png **, qui ressemble à ceci.
L'échantillon publié ci-dessous a été créé à l'aide de cela. Bien sûr, l'image et le texte ne doivent pas nécessairement l'être. Cependant, veuillez noter que le texte est supposé être SJIS pour le japonais et \ r \ n pour Windows.
À propos, le matériel d'étudiant professionnel est obtenu à partir de ce qui suit, et la taille et l'insertion de caractères sont traitées. http://pronama.azurewebsites.net/pronama/
Vous trouverez ci-dessous un exemple de code qui utilise la classe SimpleDocxService pour générer des mots.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
from docx_simple_service import SimpleDocxService
if __name__ == "__main__":
docx = SimpleDocxService()
#Paramètres de police
docx.set_normal_font("Courier New", 9)
#Affichage du titre
docx.add_head(u"Titre principal", 0)
#Insérer une illustration
docx.add_picture("report_top.png ", 3.0)
#Affichage du titre de la phrase
docx.add_head(u"Premier sujet", 1)
# shift-Mettez le fichier texte jis dans le texte doxx
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()
#Insérer une illustration
docx.add_picture("sample_pic.png ", 5.0)
#Générez du texte dans le code et mettez-le dans dox.
#Un exemple de modification est également ici.
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()
#Phrase suivante
docx.add_head(u"Deuxième sujet", 1)
#Générez du texte dans le code et mettez-le dans dox.
docx.open_text()
docx.add_text(u"\n Oui, c'est ça.")
docx.close_text()
#C'est une sauvegarde.
docx.save("test.docx")
print "complete."
Vous aurez un dox comme celui-ci.
Je pense qu'il a la structure décrite ci-dessus.
Pour python-docx, le code lui-même n'est pas si difficile une fois que vous savez comment l'écrire. Vous pouvez le comprendre en comparant l'exemple de code ci-dessus avec le code de la classe SimpleDocxService. Donc, si c'est dans cette plage, je pense que vous pouvez faire diverses choses en changeant le code affiché ici.
Je l'ai utilisé ci-dessous. Merci d'avoir fourni le merveilleux logiciel.
c'est tout.
Recommended Posts