Index: scribus/pdfwriter.cpp
===================================================================
--- scribus/pdfwriter.cpp	(révision 26852)
+++ scribus/pdfwriter.cpp	(copie de travail)
@@ -304,49 +304,11 @@
 		return result;
 	}
 	
-	QByteArray toPdf(bool v)
-	{
-		return v? "true" : "false";
-	}
-	
-	QByteArray toPdf(int v)
-	{
-		return QByteArray::number(v);
-	}
-	
-	QByteArray toPdf(uint v)
-	{
-		return QByteArray::number(v);
-	}
-	
-	QByteArray toPdf(qlonglong v)
-	{
-		return QByteArray::number(v);
-	}
-	
-	QByteArray toPdf(qulonglong v)
-	{
-		return QByteArray::number(v);
-	}
-
-#if !defined(Q_OS_WIN) && (Q_PROCESSOR_WORDSIZE != 4)
-	QByteArray toPdf(size_t v)
-	{
-		return QByteArray::number(v);
-	}
-#endif
-
-	QByteArray toPdf(double v)
-	{
-		return QByteArray::number(v, 'f');
-	}
-	
 	QByteArray toObjRef(PdfId id)
 	{
 		return toPdf(id) + " 0 R";
 	}
 	
-	
 	QByteArray toLiteralString(const QString& s)
 	{
 		return toLiteralString(toPdfDocEncoding(s));
Index: scribus/pdfwriter.h
===================================================================
--- scribus/pdfwriter.h	(révision 26852)
+++ scribus/pdfwriter.h	(copie de travail)
@@ -9,6 +9,8 @@
 #ifndef Scribus_pdfwriter_h
 #define Scribus_pdfwriter_h
 
+#include <type_traits>
+
 #include <QByteArray>
 #include <QDataStream>
 #include <QFile>
@@ -58,43 +60,33 @@
 	/**
 	 Cf. PDF32000-2008, 7.3.2
 	 */
-	QByteArray toPdf(bool v);
-	
-	/**
-	 Cf. PDF32000-2008, 7.3.3
-	 */
-	QByteArray toPdf(int v);
-	
-	/**
-	 Cf. PDF32000-2008, 7.3.3
-	 */
-	QByteArray toPdf(uint v);
+	template <typename T, std::enable_if_t<std::is_integral_v<T> || std::is_enum_v<T>, bool> = true>
+	inline QByteArray toPdf(T v)
+	{
+		return QByteArray::number(v);
+	}
 
 	/**
 	 Cf. PDF32000-2008, 7.3.3
 	 */
-	QByteArray toPdf(qlonglong v);
+	template <typename T, std::enable_if_t< std::is_floating_point_v<T>, bool> = true>
+	inline QByteArray toPdf(T v)
+	{
+		return QByteArray::number(v, 'f');
+	}
 
 	/**
-	 Cf. PDF32000-2008, 7.3.3
+	 Cf. PDF32000-2008, 7.3.2
 	 */
-	QByteArray toPdf(qulonglong v);
+	template <>
+	inline QByteArray toPdf<bool>(bool v)
+	{
+		return v ? "true" : "false";
+	}
 	
 	/**
 	 Cf. PDF32000-2008, 7.3.3
 	 */
-#if !defined(Q_OS_WIN) && (Q_PROCESSOR_WORDSIZE != 4)
-	QByteArray toPdf(size_t v);
-#endif
-	
-	/**
-	 Cf. PDF32000-2008, 7.3.3
-	 */
-	QByteArray toPdf(double v);
-	
-	/**
-	 Cf. PDF32000-2008, 7.3.3
-	 */
 	QByteArray toObjRef(PdfId id);
 	
 	/**
Index: scribus/scxmlstreamwriter.h
===================================================================
--- scribus/scxmlstreamwriter.h	(révision 26852)
+++ scribus/scxmlstreamwriter.h	(copie de travail)
@@ -7,12 +7,15 @@
 #ifndef SCXMLSTREAMWRITER_H
 #define SCXMLSTREAMWRITER_H
 
-#include "scribusapi.h"
+#include <type_traits>
 
 #include <QByteArray>
 #include <QString>
 #include <QXmlStreamWriter>
 
+#include "pdfversion.h"
+#include "scribusapi.h"
+
 class SCRIBUS_API ScXmlStreamWriter : public QXmlStreamWriter
 {
 public:
@@ -21,15 +24,14 @@
 	ScXmlStreamWriter(QIODevice* device) : QXmlStreamWriter(device) {}
 	ScXmlStreamWriter(QString*   string) : QXmlStreamWriter(string) {}
 
-	void writeAttribute(const QString & name, const QString & value) { QXmlStreamWriter::writeAttribute(name, value); }
-	void writeAttribute(const QString & name, int value)    { QXmlStreamWriter::writeAttribute(name, QString::number(value)); }
-	void writeAttribute(const QString & name, qint64 value)    { QXmlStreamWriter::writeAttribute(name, QString::number(value)); }
-	void writeAttribute(const QString & name, uint value)   { QXmlStreamWriter::writeAttribute(name, QString::number(value)); }
-	void writeAttribute(const QString & name, quint64 value)   { QXmlStreamWriter::writeAttribute(name, QString::number(value)); }
-#if !defined(Q_OS_WIN) && (Q_PROCESSOR_WORDSIZE != 4)
-	void writeAttribute(const QString & name, size_t value)   { QXmlStreamWriter::writeAttribute(name, QString::number(value)); }
-#endif
-	void writeAttribute(const QString & name, double value) { QXmlStreamWriter::writeAttribute(name, QString::number(value, 'g', 15)); }
+	void writeAttribute(const QString& name, const QString& value) { QXmlStreamWriter::writeAttribute(name, value); }
+	void writeAttribute(const QString& name, const PDFVersion& value) { QXmlStreamWriter::writeAttribute(name, QString::number(value)); }
+
+	template<typename T, std::enable_if_t<std::is_integral_v<T> || std::is_enum_v<T>, bool> = true>
+	void writeAttribute(const QString & name, T value)    { QXmlStreamWriter::writeAttribute(name, QString::number(value)); }
+
+	template<typename T, std::enable_if_t< std::is_floating_point_v<T>, bool> = true>
+	void writeAttribute(const QString & name, T value) { QXmlStreamWriter::writeAttribute(name, QString::number(value, 'g', 15)); }
 };
 
 #endif
