diff --git a/fxbarcode/cbc_codabar.cpp b/fxbarcode/cbc_codabar.cpp
index beb126f..babb40e 100644
--- a/fxbarcode/cbc_codabar.cpp
+++ b/fxbarcode/cbc_codabar.cpp
@@ -37,12 +37,11 @@
   if (!pWriter->CheckContentValidity(contents))
     return false;
 
-  BC_TYPE format = BC_TYPE::kCodabar;
   int32_t outWidth = 0;
   m_renderContents = pWriter->FilterContents(contents);
   ByteString byteString = m_renderContents.ToUTF8();
   std::unique_ptr<uint8_t, FxFreeDeleter> data(
-      pWriter->Encode(byteString, format, outWidth));
+      pWriter->Encode(byteString, outWidth));
   return data && pWriter->RenderResult(m_renderContents.AsStringView(),
                                        data.get(), outWidth);
 }
diff --git a/fxbarcode/cbc_code128.cpp b/fxbarcode/cbc_code128.cpp
index f84ee82..c4ddb9a 100644
--- a/fxbarcode/cbc_code128.cpp
+++ b/fxbarcode/cbc_code128.cpp
@@ -37,7 +37,6 @@
   if (!pWriter->CheckContentValidity(contents))
     return false;
 
-  BC_TYPE format = BC_TYPE::kCode128;
   int32_t outWidth = 0;
   WideString content(contents);
   if (contents.GetLength() % 2 && pWriter->GetType() == BC_TYPE::kCode128C)
@@ -46,7 +45,7 @@
   m_renderContents = pWriter->FilterContents(content.AsStringView());
   ByteString byteString = m_renderContents.ToUTF8();
   std::unique_ptr<uint8_t, FxFreeDeleter> data(
-      pWriter->Encode(byteString, format, outWidth));
+      pWriter->Encode(byteString, outWidth));
   return data && pWriter->RenderResult(m_renderContents.AsStringView(),
                                        data.get(), outWidth);
 }
diff --git a/fxbarcode/cbc_code39.cpp b/fxbarcode/cbc_code39.cpp
index 7939404..72a1985 100644
--- a/fxbarcode/cbc_code39.cpp
+++ b/fxbarcode/cbc_code39.cpp
@@ -37,13 +37,12 @@
   if (!pWriter->CheckContentValidity(contents))
     return false;
 
-  BC_TYPE format = BC_TYPE::kCode39;
   int32_t outWidth = 0;
   WideString filtercontents = pWriter->FilterContents(contents);
   m_renderContents = pWriter->RenderTextContents(contents);
   ByteString byteString = filtercontents.ToUTF8();
   std::unique_ptr<uint8_t, FxFreeDeleter> data(
-      pWriter->Encode(byteString, format, outWidth));
+      pWriter->Encode(byteString, outWidth));
   return data && pWriter->RenderResult(m_renderContents.AsStringView(),
                                        data.get(), outWidth);
 }
diff --git a/fxbarcode/cbc_eancode.cpp b/fxbarcode/cbc_eancode.cpp
index 81d22df..35baed8 100644
--- a/fxbarcode/cbc_eancode.cpp
+++ b/fxbarcode/cbc_eancode.cpp
@@ -26,13 +26,11 @@
   if (!pWriter->CheckContentValidity(contents))
     return false;
 
-  BC_TYPE format = GetType();
   int32_t out_width = 0;
   m_renderContents = Preprocess(contents);
   ByteString str = m_renderContents.ToUTF8();
   pWriter->InitEANWriter();
-  std::unique_ptr<uint8_t, FxFreeDeleter> data(
-      pWriter->Encode(str, format, out_width));
+  std::unique_ptr<uint8_t, FxFreeDeleter> data(pWriter->Encode(str, out_width));
   return data && pWriter->RenderResult(m_renderContents.AsStringView(),
                                        data.get(), out_width);
 }
diff --git a/fxbarcode/oned/BC_OneDimWriter.cpp b/fxbarcode/oned/BC_OneDimWriter.cpp
index df9f088..4bca114 100644
--- a/fxbarcode/oned/BC_OneDimWriter.cpp
+++ b/fxbarcode/oned/BC_OneDimWriter.cpp
@@ -85,19 +85,6 @@
   m_fontColor = color;
 }
 
-uint8_t* CBC_OneDimWriter::EncodeWithHint(const ByteString& contents,
-                                          BC_TYPE format,
-                                          int32_t& outWidth,
-                                          int32_t hints) {
-  return EncodeImpl(contents, outWidth);
-}
-
-uint8_t* CBC_OneDimWriter::Encode(const ByteString& contents,
-                                  BC_TYPE format,
-                                  int32_t& outWidth) {
-  return EncodeWithHint(contents, format, outWidth, 0);
-}
-
 int32_t CBC_OneDimWriter::AppendPattern(uint8_t* target,
                                         int32_t pos,
                                         const int8_t* pattern,
diff --git a/fxbarcode/oned/BC_OneDimWriter.h b/fxbarcode/oned/BC_OneDimWriter.h
index a8a3486..83efb99 100644
--- a/fxbarcode/oned/BC_OneDimWriter.h
+++ b/fxbarcode/oned/BC_OneDimWriter.h
@@ -47,21 +47,13 @@
   void SetFontStyle(int32_t style);
   void SetFontColor(FX_ARGB color);
 
-  uint8_t* Encode(const ByteString& contents,
-                  BC_TYPE format,
-                  int32_t& outWidth);
+  virtual uint8_t* Encode(const ByteString& contents, int32_t& outLength) = 0;
   bool RenderDeviceResult(CFX_RenderDevice* device,
                           const CFX_Matrix& matrix,
                           WideStringView contents);
   bool SetFont(CFX_Font* cFont);
 
  protected:
-  virtual uint8_t* EncodeWithHint(const ByteString& contents,
-                                  BC_TYPE format,
-                                  int32_t& outWidth,
-                                  int32_t hints);
-  virtual uint8_t* EncodeImpl(const ByteString& contents,
-                              int32_t& outLength) = 0;
   virtual bool ShowChars(WideStringView contents,
                          CFX_RenderDevice* device,
                          const CFX_Matrix& matrix,
diff --git a/fxbarcode/oned/BC_OnedCodaBarWriter.cpp b/fxbarcode/oned/BC_OnedCodaBarWriter.cpp
index 57c28be..e714742 100644
--- a/fxbarcode/oned/BC_OnedCodaBarWriter.cpp
+++ b/fxbarcode/oned/BC_OnedCodaBarWriter.cpp
@@ -120,18 +120,8 @@
   return filtercontents;
 }
 
-uint8_t* CBC_OnedCodaBarWriter::EncodeWithHint(const ByteString& contents,
-                                               BC_TYPE format,
-                                               int32_t& outWidth,
-                                               int32_t hints) {
-  if (format != BC_TYPE::kCodabar)
-    return nullptr;
-
-  return CBC_OneDimWriter::EncodeWithHint(contents, format, outWidth, hints);
-}
-
-uint8_t* CBC_OnedCodaBarWriter::EncodeImpl(const ByteString& contents,
-                                           int32_t& outLength) {
+uint8_t* CBC_OnedCodaBarWriter::Encode(const ByteString& contents,
+                                       int32_t& outLength) {
   ByteString data = m_chStart + contents + m_chEnd;
   m_iContentLen = data.GetLength();
   uint8_t* result = FX_Alloc2D(uint8_t, m_iWideNarrRatio * 7, data.GetLength());
diff --git a/fxbarcode/oned/BC_OnedCodaBarWriter.h b/fxbarcode/oned/BC_OnedCodaBarWriter.h
index a0ee62f..dbdc139 100644
--- a/fxbarcode/oned/BC_OnedCodaBarWriter.h
+++ b/fxbarcode/oned/BC_OnedCodaBarWriter.h
@@ -19,11 +19,7 @@
   ~CBC_OnedCodaBarWriter() override;
 
   // CBC_OneDimWriter:
-  uint8_t* EncodeImpl(const ByteString& contents, int32_t& outLength) override;
-  uint8_t* EncodeWithHint(const ByteString& contents,
-                          BC_TYPE format,
-                          int32_t& outWidth,
-                          int32_t hints) override;
+  uint8_t* Encode(const ByteString& contents, int32_t& outLength) override;
   bool RenderResult(WideStringView contents,
                     uint8_t* code,
                     int32_t codeLength) override;
diff --git a/fxbarcode/oned/BC_OnedCodaBarWriter_unittest.cpp b/fxbarcode/oned/BC_OnedCodaBarWriter_unittest.cpp
index eb1cad0..add28cf 100644
--- a/fxbarcode/oned/BC_OnedCodaBarWriter_unittest.cpp
+++ b/fxbarcode/oned/BC_OnedCodaBarWriter_unittest.cpp
@@ -22,7 +22,7 @@
   CBC_OnedCodaBarWriter writer;
   int32_t width;
 
-  uint8_t* encoded = writer.Encode("", BC_TYPE::kCodabar, width);
+  uint8_t* encoded = writer.Encode("", width);
   EXPECT_EQ(kModulesForDelimiters, width);
   const char* expected =
       "# ##  #  # "  // A Start
@@ -32,7 +32,7 @@
   }
   FX_Free(encoded);
 
-  encoded = writer.Encode("123", BC_TYPE::kCodabar, width);
+  encoded = writer.Encode("123", width);
   EXPECT_EQ(kModulesForDelimiters + 3 * kModulesPerNumber, width);
   expected =
       "# ##  #  # "  // A Start
@@ -45,7 +45,7 @@
   }
   FX_Free(encoded);
 
-  encoded = writer.Encode("-$./:+", BC_TYPE::kCodabar, width);
+  encoded = writer.Encode("-$./:+", width);
   EXPECT_EQ(kModulesForDelimiters + 2 * kModulesPerNumber +
                 4 * kModulesPerPunctuation,
             width);
@@ -63,7 +63,7 @@
   }
   FX_Free(encoded);
 
-  encoded = writer.Encode("456.987987987/001", BC_TYPE::kCodabar, width);
+  encoded = writer.Encode("456.987987987/001", width);
   EXPECT_EQ(kModulesForDelimiters + 15 * kModulesPerNumber +
                 2 * kModulesPerPunctuation,
             width);
@@ -126,7 +126,7 @@
   writer.SetStartChar('N');
   writer.SetEndChar('*');
 
-  uint8_t* encoded = writer.Encode("987", BC_TYPE::kCodabar, width);
+  uint8_t* encoded = writer.Encode("987", width);
   EXPECT_EQ(kModulesForDelimiters + 3 * kModulesPerNumber, width);
   const char* expected =
       "#  #  # ## "  // N (same as B) Start
diff --git a/fxbarcode/oned/BC_OnedCode128Writer.cpp b/fxbarcode/oned/BC_OnedCode128Writer.cpp
index 2fc3488..5c2a7b8 100644
--- a/fxbarcode/oned/BC_OnedCode128Writer.cpp
+++ b/fxbarcode/oned/BC_OnedCode128Writer.cpp
@@ -118,18 +118,8 @@
   m_locTextLoc = location;
 }
 
-uint8_t* CBC_OnedCode128Writer::EncodeWithHint(const ByteString& contents,
-                                               BC_TYPE format,
-                                               int32_t& outWidth,
-                                               int32_t hints) {
-  if (format != BC_TYPE::kCode128)
-    return nullptr;
-
-  return CBC_OneDimWriter::EncodeWithHint(contents, format, outWidth, hints);
-}
-
-uint8_t* CBC_OnedCode128Writer::EncodeImpl(const ByteString& contents,
-                                           int32_t& outLength) {
+uint8_t* CBC_OnedCode128Writer::Encode(const ByteString& contents,
+                                       int32_t& outLength) {
   if (contents.GetLength() < 1 || contents.GetLength() > 80)
     return nullptr;
 
diff --git a/fxbarcode/oned/BC_OnedCode128Writer.h b/fxbarcode/oned/BC_OnedCode128Writer.h
index 169a157..62e2ad6 100644
--- a/fxbarcode/oned/BC_OnedCode128Writer.h
+++ b/fxbarcode/oned/BC_OnedCode128Writer.h
@@ -27,11 +27,7 @@
                             std::vector<int32_t>* patterns);
 
   // CBC_OneDimWriter
-  uint8_t* EncodeWithHint(const ByteString& contents,
-                          BC_TYPE format,
-                          int32_t& outWidth,
-                          int32_t hints) override;
-  uint8_t* EncodeImpl(const ByteString& contents, int32_t& outLength) override;
+  uint8_t* Encode(const ByteString& contents, int32_t& outLength) override;
   bool CheckContentValidity(WideStringView contents) override;
   WideString FilterContents(WideStringView contents) override;
   void SetTextLocation(BC_TEXT_LOC location) override;
diff --git a/fxbarcode/oned/BC_OnedCode39Writer.cpp b/fxbarcode/oned/BC_OnedCode39Writer.cpp
index 1b2fb24..836c492 100644
--- a/fxbarcode/oned/BC_OnedCode39Writer.cpp
+++ b/fxbarcode/oned/BC_OnedCode39Writer.cpp
@@ -119,16 +119,6 @@
   return true;
 }
 
-uint8_t* CBC_OnedCode39Writer::EncodeWithHint(const ByteString& contents,
-                                              BC_TYPE format,
-                                              int32_t& outWidth,
-                                              int32_t hints) {
-  if (format != BC_TYPE::kCode39)
-    return nullptr;
-
-  return CBC_OneDimWriter::EncodeWithHint(contents, format, outWidth, hints);
-}
-
 void CBC_OnedCode39Writer::ToIntArray(int16_t a, int8_t* toReturn) {
   for (int32_t i = 0; i < 9; i++) {
     toReturn[i] = (a & (1 << i)) == 0 ? 1 : m_iWideNarrRatio;
@@ -155,8 +145,8 @@
   return kOnedCode39Checksum[checksum % std::size(kOnedCode39Checksum)];
 }
 
-uint8_t* CBC_OnedCode39Writer::EncodeImpl(const ByteString& contents,
-                                          int32_t& outlength) {
+uint8_t* CBC_OnedCode39Writer::Encode(const ByteString& contents,
+                                      int32_t& outlength) {
   char checksum = CalcCheckSum(contents);
   if (checksum == '*')
     return nullptr;
diff --git a/fxbarcode/oned/BC_OnedCode39Writer.h b/fxbarcode/oned/BC_OnedCode39Writer.h
index c44f2dd..e6ea93d 100644
--- a/fxbarcode/oned/BC_OnedCode39Writer.h
+++ b/fxbarcode/oned/BC_OnedCode39Writer.h
@@ -16,11 +16,7 @@
   ~CBC_OnedCode39Writer() override;
 
   // CBC_OneDimWriter
-  uint8_t* EncodeWithHint(const ByteString& contents,
-                          BC_TYPE format,
-                          int32_t& outWidth,
-                          int32_t hints) override;
-  uint8_t* EncodeImpl(const ByteString& contents, int32_t& outLength) override;
+  uint8_t* Encode(const ByteString& contents, int32_t& outLength) override;
   bool RenderResult(WideStringView contents,
                     uint8_t* code,
                     int32_t codeLength) override;
diff --git a/fxbarcode/oned/BC_OnedCode39Writer_unittest.cpp b/fxbarcode/oned/BC_OnedCode39Writer_unittest.cpp
index 44c3e62..6f1efbb 100644
--- a/fxbarcode/oned/BC_OnedCode39Writer_unittest.cpp
+++ b/fxbarcode/oned/BC_OnedCode39Writer_unittest.cpp
@@ -40,7 +40,7 @@
   uint8_t* encoded;
   const char* expected;
 
-  encoded = writer.Encode("PDFIUM", BC_TYPE::kCode39, width);
+  encoded = writer.Encode("PDFIUM", width);
   expected =
       "#   # ### ### # "  // * Start
       "# ### ### #   # "  // P
@@ -56,7 +56,7 @@
 
   writer.SetWideNarrowRatio(2);
 
-  encoded = writer.Encode("PDFIUM", BC_TYPE::kCode39, width);
+  encoded = writer.Encode("PDFIUM", width);
   expected =
       "#  # ## ## # "  // * Start
       "# ## ## #  # "  // P
@@ -77,7 +77,7 @@
   uint8_t* encoded;
   const char* expected;
 
-  encoded = writer.Encode("", BC_TYPE::kCode39, width);
+  encoded = writer.Encode("", width);
   EXPECT_EQ((0 + DELIMITER_CHARS) * MODULES_PER_CHAR - 1, width);
   expected =
       "#   # ### ### # "  // * Start
@@ -86,7 +86,7 @@
     EXPECT_EQ(expected[i] != ' ', !!encoded[i]) << i;
   FX_Free(encoded);
 
-  encoded = writer.Encode("123", BC_TYPE::kCode39, width);
+  encoded = writer.Encode("123", width);
   EXPECT_EQ((3 + DELIMITER_CHARS) * MODULES_PER_CHAR - 1, width);
   expected =
       "#   # ### ### # "  // * Start
@@ -98,7 +98,7 @@
     EXPECT_EQ(expected[i] != ' ', !!encoded[i]) << i;
   FX_Free(encoded);
 
-  encoded = writer.Encode("PDFIUM", BC_TYPE::kCode39, width);
+  encoded = writer.Encode("PDFIUM", width);
   EXPECT_EQ((6 + DELIMITER_CHARS) * MODULES_PER_CHAR - 1, width);
   expected =
       "#   # ### ### # "  // * Start
@@ -113,7 +113,7 @@
     EXPECT_EQ(expected[i] != ' ', !!encoded[i]) << i;
   FX_Free(encoded);
 
-  encoded = writer.Encode("A -$%./+Z", BC_TYPE::kCode39, width);
+  encoded = writer.Encode("A -$%./+Z", width);
   EXPECT_EQ((9 + DELIMITER_CHARS) * MODULES_PER_CHAR - 1, width);
   expected =
       "#   # ### ### # "  // * Start
@@ -140,7 +140,7 @@
 
   writer.SetCalcChecksum(true);
 
-  encoded = writer.Encode("123", BC_TYPE::kCode39, width);
+  encoded = writer.Encode("123", width);
   EXPECT_EQ((3 + CHECKSUM_CHARS + DELIMITER_CHARS) * MODULES_PER_CHAR - 1,
             width);
   expected =
@@ -154,7 +154,7 @@
     EXPECT_EQ(expected[i] != ' ', !!encoded[i]) << i;
   FX_Free(encoded);
 
-  encoded = writer.Encode("PDFIUM", BC_TYPE::kCode39, width);
+  encoded = writer.Encode("PDFIUM", width);
   EXPECT_EQ((6 + CHECKSUM_CHARS + DELIMITER_CHARS) * MODULES_PER_CHAR - 1,
             width);
   expected =
diff --git a/fxbarcode/oned/BC_OnedEAN13Writer.cpp b/fxbarcode/oned/BC_OnedEAN13Writer.cpp
index 0834941..02aab8c 100644
--- a/fxbarcode/oned/BC_OnedEAN13Writer.cpp
+++ b/fxbarcode/oned/BC_OnedEAN13Writer.cpp
@@ -85,18 +85,8 @@
   return EANCalcChecksum(contents);
 }
 
-uint8_t* CBC_OnedEAN13Writer::EncodeWithHint(const ByteString& contents,
-                                             BC_TYPE format,
-                                             int32_t& outWidth,
-                                             int32_t hints) {
-  if (format != BC_TYPE::kEAN13)
-    return nullptr;
-
-  return CBC_OneDimWriter::EncodeWithHint(contents, format, outWidth, hints);
-}
-
-uint8_t* CBC_OnedEAN13Writer::EncodeImpl(const ByteString& contents,
-                                         int32_t& outLength) {
+uint8_t* CBC_OnedEAN13Writer::Encode(const ByteString& contents,
+                                     int32_t& outLength) {
   if (contents.GetLength() != 13)
     return nullptr;
 
diff --git a/fxbarcode/oned/BC_OnedEAN13Writer.h b/fxbarcode/oned/BC_OnedEAN13Writer.h
index 0a9f2ce..c2d701d 100644
--- a/fxbarcode/oned/BC_OnedEAN13Writer.h
+++ b/fxbarcode/oned/BC_OnedEAN13Writer.h
@@ -21,11 +21,7 @@
   ~CBC_OnedEAN13Writer() override;
 
   // CBC_OneDimEANWriter:
-  uint8_t* EncodeWithHint(const ByteString& contents,
-                          BC_TYPE format,
-                          int32_t& outWidth,
-                          int32_t hints) override;
-  uint8_t* EncodeImpl(const ByteString& contents, int32_t& outLength) override;
+  uint8_t* Encode(const ByteString& contents, int32_t& outLength) override;
   bool CheckContentValidity(WideStringView contents) override;
   WideString FilterContents(WideStringView contents) override;
   int32_t CalcChecksum(const ByteString& contents) override;
diff --git a/fxbarcode/oned/BC_OnedEAN13Writer_unittest.cpp b/fxbarcode/oned/BC_OnedEAN13Writer_unittest.cpp
index d7f1425..d0bb4b6 100644
--- a/fxbarcode/oned/BC_OnedEAN13Writer_unittest.cpp
+++ b/fxbarcode/oned/BC_OnedEAN13Writer_unittest.cpp
@@ -18,23 +18,23 @@
 
   // EAN-13 barcodes encode 13-digit numbers into 95 modules in a unidimensional
   // disposition.
-  encoded = writer.Encode("", BC_TYPE::kEAN13, width);
+  encoded = writer.Encode("", width);
   EXPECT_FALSE(encoded);
   FX_Free(encoded);
 
-  encoded = writer.Encode("123", BC_TYPE::kEAN13, width);
+  encoded = writer.Encode("123", width);
   EXPECT_FALSE(encoded);
   FX_Free(encoded);
 
-  encoded = writer.Encode("123456789012", BC_TYPE::kEAN13, width);
+  encoded = writer.Encode("123456789012", width);
   EXPECT_FALSE(encoded);
   FX_Free(encoded);
 
-  encoded = writer.Encode("12345678901234", BC_TYPE::kEAN13, width);
+  encoded = writer.Encode("12345678901234", width);
   EXPECT_FALSE(encoded);
   FX_Free(encoded);
 
-  encoded = writer.Encode("1234567890128", BC_TYPE::kEAN13, width);
+  encoded = writer.Encode("1234567890128", width);
   EXPECT_TRUE(encoded);
   EXPECT_EQ(95, width);
 
@@ -60,7 +60,7 @@
   }
   FX_Free(encoded);
 
-  encoded = writer.Encode("7776665554440", BC_TYPE::kEAN13, width);
+  encoded = writer.Encode("7776665554440", width);
   EXPECT_TRUE(encoded);
   EXPECT_EQ(95, width);
 
diff --git a/fxbarcode/oned/BC_OnedEAN8Writer.cpp b/fxbarcode/oned/BC_OnedEAN8Writer.cpp
index 91d0420..a542fdf 100644
--- a/fxbarcode/oned/BC_OnedEAN8Writer.cpp
+++ b/fxbarcode/oned/BC_OnedEAN8Writer.cpp
@@ -88,18 +88,8 @@
   return EANCalcChecksum(contents);
 }
 
-uint8_t* CBC_OnedEAN8Writer::EncodeWithHint(const ByteString& contents,
-                                            BC_TYPE format,
-                                            int32_t& outWidth,
-                                            int32_t hints) {
-  if (format != BC_TYPE::kEAN8)
-    return nullptr;
-
-  return CBC_OneDimWriter::EncodeWithHint(contents, format, outWidth, hints);
-}
-
-uint8_t* CBC_OnedEAN8Writer::EncodeImpl(const ByteString& contents,
-                                        int32_t& outLength) {
+uint8_t* CBC_OnedEAN8Writer::Encode(const ByteString& contents,
+                                    int32_t& outLength) {
   if (contents.GetLength() != 8)
     return nullptr;
 
diff --git a/fxbarcode/oned/BC_OnedEAN8Writer.h b/fxbarcode/oned/BC_OnedEAN8Writer.h
index 9c3d751..f8a42d9 100644
--- a/fxbarcode/oned/BC_OnedEAN8Writer.h
+++ b/fxbarcode/oned/BC_OnedEAN8Writer.h
@@ -22,11 +22,7 @@
   ~CBC_OnedEAN8Writer() override;
 
   // CBC_OneDimEANWriter:
-  uint8_t* EncodeWithHint(const ByteString& contents,
-                          BC_TYPE format,
-                          int32_t& outWidth,
-                          int32_t hints) override;
-  uint8_t* EncodeImpl(const ByteString& contents, int32_t& outLength) override;
+  uint8_t* Encode(const ByteString& contents, int32_t& outLength) override;
   bool CheckContentValidity(WideStringView contents) override;
   WideString FilterContents(WideStringView contents) override;
   void SetDataLength(int32_t length) override;
diff --git a/fxbarcode/oned/BC_OnedEAN8Writer_unittest.cpp b/fxbarcode/oned/BC_OnedEAN8Writer_unittest.cpp
index 18bc605..513c666 100644
--- a/fxbarcode/oned/BC_OnedEAN8Writer_unittest.cpp
+++ b/fxbarcode/oned/BC_OnedEAN8Writer_unittest.cpp
@@ -18,23 +18,23 @@
 
   // EAN-8 barcodes encode 8-digit numbers into 67 modules in a unidimensional
   // disposition.
-  encoded = writer.Encode("", BC_TYPE::kEAN8, width);
+  encoded = writer.Encode("", width);
   EXPECT_FALSE(encoded);
   FX_Free(encoded);
 
-  encoded = writer.Encode("123", BC_TYPE::kEAN8, width);
+  encoded = writer.Encode("123", width);
   EXPECT_FALSE(encoded);
   FX_Free(encoded);
 
-  encoded = writer.Encode("1234567", BC_TYPE::kEAN8, width);
+  encoded = writer.Encode("1234567", width);
   EXPECT_FALSE(encoded);
   FX_Free(encoded);
 
-  encoded = writer.Encode("123456789", BC_TYPE::kEAN8, width);
+  encoded = writer.Encode("123456789", width);
   EXPECT_FALSE(encoded);
   FX_Free(encoded);
 
-  encoded = writer.Encode("12345670", BC_TYPE::kEAN8, width);
+  encoded = writer.Encode("12345670", width);
   EXPECT_TRUE(encoded);
   EXPECT_EQ(67, width);
 
@@ -55,7 +55,7 @@
   }
   FX_Free(encoded);
 
-  encoded = writer.Encode("99441104", BC_TYPE::kEAN8, width);
+  encoded = writer.Encode("99441104", width);
   EXPECT_TRUE(encoded);
   EXPECT_EQ(67, width);
 
diff --git a/fxbarcode/oned/BC_OnedUPCAWriter.cpp b/fxbarcode/oned/BC_OnedUPCAWriter.cpp
index bff5db1..00cb37c 100644
--- a/fxbarcode/oned/BC_OnedUPCAWriter.cpp
+++ b/fxbarcode/oned/BC_OnedUPCAWriter.cpp
@@ -84,22 +84,11 @@
   return checksum;
 }
 
-uint8_t* CBC_OnedUPCAWriter::EncodeWithHint(const ByteString& contents,
-                                            BC_TYPE format,
-                                            int32_t& outWidth,
-                                            int32_t hints) {
-  if (format != BC_TYPE::kUPCA)
-    return nullptr;
-
+uint8_t* CBC_OnedUPCAWriter::Encode(const ByteString& contents,
+                                    int32_t& outLength) {
   ByteString toEAN13String = '0' + contents;
   m_iDataLenth = 13;
-  return m_subWriter->EncodeWithHint(toEAN13String, BC_TYPE::kEAN13, outWidth,
-                                     hints);
-}
-
-uint8_t* CBC_OnedUPCAWriter::EncodeImpl(const ByteString& contents,
-                                        int32_t& outLength) {
-  return nullptr;
+  return m_subWriter->Encode(toEAN13String, outLength);
 }
 
 bool CBC_OnedUPCAWriter::ShowChars(WideStringView contents,
diff --git a/fxbarcode/oned/BC_OnedUPCAWriter.h b/fxbarcode/oned/BC_OnedUPCAWriter.h
index aad574d..e9ed964 100644
--- a/fxbarcode/oned/BC_OnedUPCAWriter.h
+++ b/fxbarcode/oned/BC_OnedUPCAWriter.h
@@ -23,11 +23,7 @@
   ~CBC_OnedUPCAWriter() override;
 
   // CBC_OneDimEANWriter:
-  uint8_t* EncodeWithHint(const ByteString& contents,
-                          BC_TYPE format,
-                          int32_t& outWidth,
-                          int32_t hints) override;
-  uint8_t* EncodeImpl(const ByteString& contents, int32_t& outLength) override;
+  uint8_t* Encode(const ByteString& contents, int32_t& outLength) override;
   bool CheckContentValidity(WideStringView contents) override;
   WideString FilterContents(WideStringView contents) override;
   void InitEANWriter() override;
diff --git a/fxbarcode/oned/BC_OnedUPCAWriter_unittest.cpp b/fxbarcode/oned/BC_OnedUPCAWriter_unittest.cpp
index 0088a69..19330b5 100644
--- a/fxbarcode/oned/BC_OnedUPCAWriter_unittest.cpp
+++ b/fxbarcode/oned/BC_OnedUPCAWriter_unittest.cpp
@@ -16,23 +16,23 @@
 
   // UPCA barcodes encode 12-digit numbers into 95 modules in a unidimensional
   // disposition.
-  uint8_t* encoded = writer.Encode("", BC_TYPE::kUPCA, width);
+  uint8_t* encoded = writer.Encode("", width);
   EXPECT_FALSE(encoded);
   FX_Free(encoded);
 
-  encoded = writer.Encode("123", BC_TYPE::kUPCA, width);
+  encoded = writer.Encode("123", width);
   EXPECT_FALSE(encoded);
   FX_Free(encoded);
 
-  encoded = writer.Encode("12345678901", BC_TYPE::kUPCA, width);
+  encoded = writer.Encode("12345678901", width);
   EXPECT_FALSE(encoded);
   FX_Free(encoded);
 
-  encoded = writer.Encode("1234567890123", BC_TYPE::kUPCA, width);
+  encoded = writer.Encode("1234567890123", width);
   EXPECT_FALSE(encoded);
   FX_Free(encoded);
 
-  encoded = writer.Encode("123456789012", BC_TYPE::kUPCA, width);
+  encoded = writer.Encode("123456789012", width);
   const char* expected =
       "# #"      // Start
       "  ##  #"  // 1 L
@@ -56,7 +56,7 @@
   }
   FX_Free(encoded);
 
-  encoded = writer.Encode("777666555440", BC_TYPE::kUPCA, width);
+  encoded = writer.Encode("777666555440", width);
   expected =
       "# #"      // Start
       " ### ##"  // 7 L
